链接器问题将C++项目从vs2005移动到vs2010

linker issue moving a C++ project from vs2005 to vs2010

本文关键字:vs2005 移动 vs2010 项目 问题 C++ 链接      更新时间:2023-10-16

我正试图将一个项目从Visual Studio 2005转换到2010。(为Maya 2014编写插件,因为它仅为x64)。

首先,我使用VS2010针对Maya 2013 x86进行编译。这种编译和链接在VS2005中运行得很好,但在2010中,我遇到了大量错误:

error LNK2019: unresolved external symbol "void __cdecl operator delete(void *,char const *,int)" (??3@YAXPAXPBDH@Z) referenced in function __unwindfunclet$?creator@exporter@@SAPAXXZ$0

我已经附上了生成以下输出的命令行(为了清晰起见,省略了一些部分)。您将注意到VS工具集在80到100之间(2005年与2010年)有所不同,并且块{ project libs compiled with VS2005 .sln file }在2010链接器中丢失。此块是Visual Studio作为解决方案生成的一部分编译的依赖项目的列表。

你知道我如何让这些本地构建的库出现在2010链接器中吗?我也应该期待他们吗?有人能提出其他攻击点来解决这个问题吗?

2005年++

/Od /I "C:Program Files (x86)AutodeskMaya2013include" /I {our engine include} /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "NT_PLUGIN" /D "REQUIRE_IOSTREAM" /D "_WINDLL" /FD /EHsc /MTd /Fp{pch file output} /Fo"Debug_2013" /Fd"Debug_2013vc80.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt

2010年++

/I"C:Program Files (x86)AutodeskMaya2013include" /I{our engine include} /Zi /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "NT_PLUGIN" /D "REQUIRE_IOSTREAM" /D "_WINDLL" /Gm- /EHsc /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /GR /Fp*{pch file output}* /Fa"Debug" /Fo"Debug" /Fd"Debugvc100.pdb" /Gd /TP /analyze- /errorReport:prompt

2005链接器

/OUT:{dll output file} /NOLOGO /LIBPATH:"C:Program Files (x86)AutodeskMaya2013lib" /DLL /MANIFEST /MANIFESTFILE:{manifest output file} /NODEFAULTLIB:"libcmt.lib" /DEBUG /PDB:{pdb file} /MAP /IMPLIB:{import library} /ERRORREPORT:PROMPT Opengl32.lib pnglib_d.lib zlib_d.lib libeay32.lib ssleay32.lib Foundation.lib OpenMaya.lib OpenMayaUI.lib OpenMayaAnim.lib OpenMayaFX.lib OpenMayaRender.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 { project libs compiled with VS2005 .sln file } /subsystem:windows /dll /incremental:yes /debug /export:initializePlugin /export:uninitializePlugin

2010链接器

/OUT:{dll output file} /NOLOGO /LIBPATH:"C:Program Files (x86)AutodeskMaya2013lib" /DLL "Opengl32.lib" "pnglib_d.lib" "zlib_d.lib" "libeay32.lib" "ssleay32.lib" "Foundation.lib" "OpenMaya.lib" "OpenMayaUI.lib" "OpenMayaAnim.lib" "OpenMayaFX.lib" "OpenMayaRender.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" /NODEFAULTLIB:"libcmt.lib" /MANIFEST /ManifestFile:{manifest output file} /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:{pdb output file} /MAP /PGD:{pgd output file} /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT /subsystem:windows /dll /debug /export:initializePlugin /export:uninitializePlugin

终于解决了问题!!!!

遵循"新方式"Visual Studio 2010列出了项目依赖性。http://manski.net/2011/11/project-dependencies-in-visual-c/

这解决了"未解决的符号"问题,但产生了以下错误:错误MSB4006:目标依赖关系图中存在循环依赖关系

我通过这里的说明解决了这个问题https://connect.microsoft.com/VisualStudio/feedback/details/534361/better-error-message-for-output-circular-dependency#details

希望这能给别人省去很多麻烦。