【发布时间】:2016-12-18 09:15:57
【问题描述】:
我有一个使用 MD 构建库(PocoFoundationmdd.lib 等)的调试版本的 VS2012 项目。 #POCO_STATIC 已定义 - 一切都很好。
在 Release 模式下编译时,我使用的是相同库的发布版本 (PocoFoundationmd.lib) - 但是 VS2012 然后突然拒绝链接并要求MT 版本(PocoFoundationmt.lib)
error LNK1104: cannot open file 'PocoFoundationmt.lib'
是什么导致 POCO/VS 在 Release 模式下寻找 MT 版本而不是 MD 版本?有什么想法吗?
这是 VS2012 在 DEBUG 模式下使用的链接器命令(有效)
/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
.. 这是 RELEASE 模式的链接器命令(不起作用)
/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
【问题讨论】:
-
@HansPassant 这个 URL 对解决问题很有帮助。我们应该让它成为一个答案,让它变得更加明显吗?
标签: c++ visual-studio-2012 linker poco poco-libraries