2014-03-13 67 views
0

我无法测试我的应用程序,因此决定了解更多信息。这是情况:我有一个第三方静态库,我喜欢在我的MFC应用程序中使用它。我创建了一个基于MFC对话框的应用程序,它在调试和发布中均成功构建。我对MFC Single文档更感兴趣,因此我创建了一个MFC SD应用程序并按照之前的方式链接了标题和库,然后开始构建。static libary debug vs release

用MFC SD应用,这些是我得到:

  1. 在调试模式设置为 “多线程调试DLL(/ MDD)” RT选项,得到了 一些LNK2005错误的东西。

  2. 与 “多线程DLL(/ MD)” 设置为RT选项,调试模式有对夫妇只生警告:

    LINK:警告LNK4098:defaultlib 'MSVCRT' 与使用其他库的冲突;使用/ NODEFAULTLIB:库

    链接:警告LNK4098:defaultlib'LIBCMT'与使用其他库相冲突;使用/ NODEFAULTLIB:库

  3. 与设置为多线程DLL(/ MD)RT选项释放模式”有没有错误或警告

一下这些指示?难道这些预期。我希望能够在调试模式下运行我的应用程序,首先调试它,然后将其变为释放模式。在这方面有所不同?

回答

0

问题是你使用co这是编译与不同的CRT选项。我相信它是由你的静态lib引起的。

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

效果是,你有malloc的代码,免费的新,在你的exe中删除几个版本。因此,您的代码的一部分可能会使用调试内核分配内存,另一部分代码会使用发行版来释放它,反之亦然。

或者你的代码设置的语言环境,而这个区域是不是在使用不同的CRT另一部分代码使用...

事实上,如果你不使用相同的CRT标志的静态库没有保证你的代码可以工作,奇怪的事情不会发生。

只要你有一个静态库

  • 编译器版本
  • 调试所有的设置/释放
  • CRT用途(如DLL或静态)
  • MFC使用(静态或DLL)

必须匹配!