При использовании Visual Studio 10 C ++ у меня странная ошибка связи. По какой-то причине ссылки на глобальный объект не будут ссылаться на этот глобальный объект. Он говорит мне, что символ еще не определен, но когда я его просматриваю .cod-файл, этот символ выглядит как день.
Ошибка:
FTShell.lib(ftcommodule.obj) : error LNK2001: unresolved external symbol
"class CFTModuleShellBase * _pFTModule" (?_pFTModule@@3PAVCFTModuleShellBase@@A)
Но файл .cod для основного файла cpp показывает как объявление, так и выделение глобального символа:
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>