这个问题已被多次提出,但 Visual Studio 从未停止挑战我。
我们有一个应用程序应该是自给自足的,即不依赖于任何第三方库。这就是我们使用MT(d)
代码生成标志静态构建所有内容的原因。
该应用程序依赖于Qt
、zlib
和。所有这些库都构建为带有. 该应用程序还使用了一些-related 代码,因此我们还必须对其进行链接。OpenSSL
DCMTK
MT(d)
MFC
MFC 包含在
#include <afxwin.h>
我在某处读到这应该是每个文件中的第一个包含,但我不确定它是否属实。无论如何,该行并不包含在每个文件中,只有一个文件包含它。
以下是与链接相关的错误:
Error 24 error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMTD.lib(delete2.obj) uafxcwd.lib
Error 22 error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj) uafxcwd.lib
Error 23 error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmtd.lib(newaop.obj) uafxcwd.lib
Error 21 error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj) uafxcwd.lib
这是链接器输出。
我阅读了许多网站上的许多主题以及 MSDN 的 KB 中的这篇文章。但他们没有帮助我,因为他们都一直说 MFC 库应该在 CRT 之前链接,但我找不到改变链接顺序的方法。
任何帮助是极大的赞赏。
编辑1:使用这个线程的技巧实际上解决了问题,但我仍然想知道这里出了什么问题。
编辑 2:在 Windows 7 和 Qt 4.6.3 上使用 Visual Studio 2008 SP1