静态图书馆调试与发行版



我无法测试我的应用程序,因此决定找到更多。这就是情况:我有一个我喜欢在MFC应用程序中使用的第三方静态库。我创建了一个基于MFC对话框的应用程序,它在调试和发布中都成功地构建了。我对MFC单个文档更感兴趣,因此我创建了一个MFC SD应用程序,并像以前一样链接了标题和库。

使用MFC SD应用程序,这些是我得到的:

  1. 在调试模式下,RT选项设置为"多线程调试DLL(/MDD)",一些LNK2005错误内容。

  2. 在带有RT选项的调试模式下,将设置为"多线程DLL(/MD)",仅收到几个警告:

    链接:警告LNK4098:使用其他libs; use/nodefaultlib:library

    defaultlib'msvcrt'冲突

    链接:警告LNK4098:使用其他libs defaultlib'libcmt'冲突;使用/nodefaultlib:library

  3. 在发行模式下,将RT选项设置为多线程DLL(/MD)"没有错误或警告。

这些指示什么?这些是预期的吗?该应用程序是否会根据选项2和3?我喜欢首先以调试模式运行我的应用程序进行调试,然后将其转换为发布模式。

为什么MFC SD与对话框在这方面的行为如此不同?

问题在于,您使用的是与不同的CRT选项编译的代码。我确定它是由您引起的。

如果您收到了1. 2之类的警告。它表明,您的一部分代码链接到一个CRT代码平台,而代码的另一部分需要其他CRT代码。

效果是,您有用于Malloc的代码,免费的新,在您的EXE中删除多个版本。因此,您的代码的一个部分可能会用调试核心分配内存,而代码的另一部分则用发行版本释放它...反之亦然。

或您的代码设置了一个语言环境,并且该语言环境在使用其他CRT的另一个代码部分中不使用...

实际上,如果您不为静态库使用相同的CRT标志,则无法保证您的代码会起作用,并且不会发生奇怪的事情。

只要您拥有静态库的所有设置

  • 编译器版本
  • 调试/发行
  • crt用法(作为dll或static)
  • MFC使用(静态或DLL)

必须匹配!

相关内容

  • 没有找到相关文章

最新更新