0

Использование Visual Studio 10 C++, у меня возникла странная ошибка ссылки. По какой-то причине ссылки на глобальный объект не будут ссылаться на этот глобальный объект. Это говорит мне, что символ еще не определен, но когда я его просматриваю .cod-файл, символ прямо там как день.Странные нерешенные внешние ошибки в связанных объектах

Ошибка:

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

Но .COD файл для основного файла CPP показывает как декларацию и распределения глобального символа:

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 соответствует глобальному символу в исходном файле?

EDIT: Я побежал 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. И это вызвало неразрешенные внешние функции от функций, объявленных в проекте. Вероятно, ошибка в компоновщике, но это было нанесено самому себе.