0

使用Visual Studio 10 C++时,出现奇怪的链接错误。出于某种原因,对全局对象的引用不会链接到该全局对象。它告诉我一个符号是未定义的,但是当我查看.cod文件时,符号就像白天一样平淡无奇。链接对象中奇怪的无法解析的外部错误

错误:

FTShell.lib(ftcommodule.obj) : error LNK2001: unresolved external symbol 
    "class CFTModuleShellBase * _pFTModule" ([email protected]@[email protected]@A) 

但主CPP文件.cod文件同时显示了声明和全局符号的分配:

PUBLIC [email protected]@[email protected]@A  ; _pFTModule 

_DATA SEGMENT 
[email protected]@[email protected]@A DD FLAT:[email protected]@[email protected]@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> 

回答

0

奇怪的是,该错误是由于将ImpLib属性设置为错误值而导致的。该物业表说:<ImpLib>$(OneOfMyPathVars)\%(Filename).lib</Implib>。由于%(文件名)在链接阶段为空,“C:\ foo.lib”导致不创建ImpLib。这导致了项目中宣布的功能未解决的外部问题。可能是链接器中的一个错误,但它是自我造成的。

相关问题