Странные нерешенные внешние ошибки в связанных объектах - PullRequest
0 голосов
/ 25 июня 2010

При использовании 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>

1 Ответ

0 голосов
/ 02 июля 2010

Как ни странно, ошибка была результатом задания для свойства ImpLib неверного значения.В листе недвижимости сказано: <ImpLib>$(OneOfMyPathVars)\%(Filename).lib</Implib>.Так как% (имя файла) был пустым во время стадии ссылки "C: \ foo.lib", не вызывает создание ImpLib.И это вызвало неразрешенные внешние эффекты от функций, объявленных в проекте.Возможно, ошибка в компоновщике, но она была нанесена самостоятельно.

...