链接器问题将C++项目从vs2005移动到vs2010
linker issue moving a C++ project from vs2005 to vs2010
我正试图将一个项目从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
希望这能给别人省去很多麻烦。
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- MSVC将仅移动结构参数解释为指针
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 可以使用移动语义更改或改进此C++代码吗?
- 使lambda不可复制/不可移动
- c++在使用指针时移动语义
- 将QGraphicsItem的移动区域限制在多边形区域内
- SendInput()鼠标移动计算
- 按值 C++ 返回时进行双倍移动
- 移动二维数组中的字符
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 安全到标准:移动会员?
- 链接器问题将C++项目从vs2005移动到vs2010