我有一个使用MD构建库的调试版本的VS2012项目(PocoFoundation mdd .lib等)。 在发布模式下进行编译时,我正在使用相同库的发布版本(PocoFoundation md .lib) - 但VS2012然后突然拒绝链接并要求改为 MT 版本(PocoFoundationmt.lib) 是什么导致POCO / VS在发布模式下寻找MT版本而不是MD版本?有什么想法吗? 这是VS2012在<strong> DEBUG 模式下使用的链接器命令(可以工作) ..这里是 RELEASE 模式的链接器命令(不起作用)error LNK1104: cannot open file 'PocoFoundationmt.lib'
/OUT:"C:\xxx...\xxx.dll" /MANIFEST /NXCOMPAT /PDB:"C:\xxx...\xxx.pdb" /DYNAMICBASE "ssleay32.lib" "libeay32.lib" "cpprest120d_2_8.lib" "log4cppD.lib" "winhttp.lib" "Crypt32.lib" "Bcrypt.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /IMPLIB:"C:\xxx...\xxx.lib" /DEBUG /DLL /MACHINE:X86 /INCREMENTAL /PGD:"C:\xxx...\xxx.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\xxx.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"..\libs\Poco\Debug" /TLBID:1
/OUT:"C:\xxx...\xxx.dll" /MANIFEST /LTCG /NXCOMPAT /PDB:"C:\xxx...\xxx.pdb" /DYNAMICBASE "ssleay32.lib" "libeay32.lib" "cpprest120_2_8.lib" "log4cppLIB.lib" "winhttp.lib" "Crypt32.lib" "Bcrypt.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /IMPLIB:"C:\xxx...\xxx.lib" /DEBUG /DLL /MACHINE:X86 /OPT:REF /SAFESEH /INCREMENTAL:NO /PGD:"C:\xxx...\xxx.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Release\xxx.dll.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"..\libs\Poco\Release" /TLBID:1
答案 0 :(得分:1)
如果没有看到编译命令行的样子,很难说清楚。也许您在其中一个标题中定义了POCO_STATIC?在已经包含Foundation.h
之后可能会遇到该定义,并且链接将根据this logic进行。发布和调试之间可能存在差异。或者,您实际上可能在调试中链接mtd.lib
并且已经构建了`PocoFoundationmtd.lib但没有PocoFoundationmt.lib,因此发布版本无法找到它。
阅读this answer可能会有所帮助。
答案 1 :(得分:0)
将 POCO_STATIC 和 _DLL 添加到预处理程序定义中修复它!
(我还将同一项目中的所有其他LIBS重新编译为MD - 因为那里有一些MT库。)
谢谢!
答案 2 :(得分:-1)
在调试模式下编译的库通常与发布模式库完全不同,原因有很多:
一般情况下,除非您自己负责生成这些库,否则您需要为Debug和Release获取单独的版本,并确保您的项目配置为为每个配置获取正确的版本。