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 ファイルが 1 つしかないことに気付きました。プロジェクトには 2 つの .cpp ファイルがあります。MSBUILD は両方のファイルをビルドしました。では、なぜ両方のファイルをリンカーに渡さなかったのでしょう。.vcxproj ファイルは、.cpp ファイルを異なる方法で処理しません。MSBUILD がリンク ステップに両方のファイルを含めないのはなぜですか?
<ItemGroup>
<ClCompile Include="FTTrace.cpp" />
<ClCompile Include="TraceImpl.cpp" />
</ItemGroup>