使用 Visual Studio 10 C++,我遇到了奇怪的链接错误。由于某种原因,对全局对象的引用不会链接到该全局对象。它告诉我一个符号是未定义的,但是当我让它查看 .cod 文件时,符号就在那里,就像白天一样。
错误:
FTShell.lib(ftcommodule.obj) : error LNK2001: unresolved external symbol
"class CFTModuleShellBase * _pFTModule" (?_pFTModule@@3PAVCFTModuleShellBase@@A)
但是主 cpp 文件的 .cod 文件显示了全局符号的声明和分配:
PUBLIC ?_pFTModule@@3PAVCFTModuleShellBase@@A ; _pFTModule
_DATA SEGMENT
?_pFTModule@@3PAVCFTModuleShellBase@@A DD FLAT:?_Module@@3VCFTComModule@@A ; _pFTModule
ORG $+4
那么为什么静态库的 _pFTModule 不匹配我的源文件中的全局符号呢?
编辑:我从命令行运行 msbuild:
Link:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe
/ERRORREPORT:QUEUE.... "C:\(path)\FTTrace.res"
"C:\(path)\FTTrace.obj"
我注意到最后只有一个 .obj 文件。项目中有两个 .cpp 文件。并且 MSBUILD 确实构建了这两个文件。那么为什么不将两个文件都传递给链接器。.vcxproj 文件不会以不同方式处理 .cpp 文件。为什么 MSBUILD 不在链接步骤中包含这两个文件?
<ItemGroup>
<ClCompile Include="FTTrace.cpp" />
<ClCompile Include="TraceImpl.cpp" />
</ItemGroup>