繁体   English   中英

是否可以在发布模式下将调试模式的编译库链接到项目?

[英]Is it possible to link a debug mode compiled library to a project in release mode?

我在C ++和Visual Studio的调试模式下有一个已编译的库(静态.lib),并想在将要以发布模式进行编译的项目中使用它。 这可能吗? 我无法在发布模式下编译库:(
让我问一个更笼统的问题:使用库时我应该考虑哪些注意事项?

对于Visual Studio(2005和更高版本),默认情况下,在调试和发布模式下,将对STL容器和迭代器等类进行不同的定义,并具有不同的内存布局。 如果通过链接静态库(或调用接口包含此类的动态库)来混合此类的调试版本和发行版,则会遇到麻烦。

我相信,但我不是100%确信,使用MSVS 2005和2008可以链接代码,并且在运行时您会遇到神秘的崩溃,而使用MSVS 20010和2012则无法链接代码。

在调试模式下进行编译时,可以通过将宏_SECURE_SCL定义为0来强制Visual Studio使用STL容器和迭代器的发行版。

是否可以将发布模式下的调试模式兼容库链接到项目?

是。 调试模式仅意味着包含断言,包含调试符号等。库的调试版本应与发行版本一样具有完整的功能(尽管它可能比发行版本运行得慢/消耗更多的内存)。

编辑:正如David Rodriguez-dribeas指出的,如果内联函数的定义在发布和调试模式下不同,则这可能会产生未定义的行为,因为它违反了一个定义规则。

我应该考虑与图书馆合作的哪些注意事项?

范围太广,无法在StackOverflow上得到解答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM