0

我在 C++ 和 Visual Studio 中有一个处于调试模式的编译库(静态 .lib),并希望在将要在发布模式下编译的项目中使用它。这可能吗?我无法在发布模式下编译库 :(
让我问一个更一般的问题:我应该关心使用库的哪些注意事项?

4

2 回答 2

4

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

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

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

于 2012-11-09T21:07:05.653 回答
1

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

是的。调试模式仅意味着包含断言、调试符号等。库的调试版本应该像发布版本一样功能齐全(尽管它可能比发布版本运行更慢/消耗更多内存)。

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

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

这太宽泛了,无法在 StackOverflow 上回答。

于 2012-11-09T20:20:40.233 回答