我无法测试我的应用程序,因此决定了解更多信息。情况就是这样:我有一个第三方静态库,我喜欢在我的MFC应用程序中使用它。我创建了一个基于MFC对话框的应用程序,它在调试和发布中都成功构建。我对MFC单文档更感兴趣,因此我创建了一个MFC SD应用程序并将标题和库链接起来,然后开始构建。
使用MFC SD应用程序,这些是我得到的:
在调试模式下,RT选项设置为"多线程调试DLL(/ MDd)",得到了 一些LNK2005错误的东西。
在RT选项设置为"多线程DLL(/ MD)"的调试模式下,仅收到几个警告:
LINK:警告LNK4098:defaultlib' MSVCRT'与使用其他库冲突;使用/ NODEFAULTLIB:库
LINK:警告LNK4098:defaultlib' LIBCMT'与使用其他图书馆的冲突; use / NODEFAULTLIB:library
在发布模式下,RT选项设置为多线程DLL(/ MD)"没有错误或警告。
这些表明了什么?这些都是预期的。该应用程序是否可以在选项2和3下工作?我希望能够首先在调试模式下运行我的应用程序进行调试,然后将其转换为发布模式。
为什么MFC SD与基于对话的行为在这方面的表现如此不同?
答案 0 :(得分:0)
问题是您使用使用不同CRT选项编译的代码。我确信它是由你的静态lib引起的。
如果你收到1 + 2以下的警告。它表明您的一部分代码链接到一个CRT代码平台,而代码的其他部分需要其他CRT代码。
效果是,你有exeoc的代码,免费的新的,删除你的exe中的几个版本。因此,代码的一部分可能会使用调试内核分配内存,而另一部分代码会使用发布版本释放它...反之亦然。
或者您的代码设置了区域设置,并且此区域设置不在另一个使用不同CRT的代码部分中使用...
事实上,如果您不对静态库使用相同的CRT标志,则无法保证您的代码可以正常工作,并且不会发生奇怪的事情。
只要您拥有静态库
的所有设置必须匹配!