En utilisant Visual Studio 10 C++, j'ai une erreur de liaison bizarre. Pour une raison quelconque, les références à un objet global ne seront pas liées à cet objet global. Il est en train de me dire qu'un symbole est indéfini mais quand je l'ai vu le fichier .cod, le symbole est juste là comme jour.Erreurs externes non résolues étranges dans les objets liés
L'erreur:
FTShell.lib(ftcommodule.obj) : error LNK2001: unresolved external symbol
"class CFTModuleShellBase * _pFTModule" ([email protected]@[email protected]@A)
Mais le fichier .cod pour le principal fichier cpp montre à la fois la déclaration et l'attribution du symbole global:
PUBLIC [email protected]@[email protected]@A ; _pFTModule
_DATA SEGMENT
[email protected]@[email protected]@A DD FLAT:[email protected]@[email protected]@A ; _pFTModule
ORG $+4
Alors pourquoi pas de la bibliothèque statique _pFTModule correspond au symbole global dans mon fichier source?
EDIT: J'ai couru msbuild de la ligne de commande:
Link:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe
/ERRORREPORT:QUEUE.... "C:\(path)\FTTrace.res"
"C:\(path)\FTTrace.obj"
Et j'ai remarqué à la fin il n'y a qu'un seul fichier obj. Il y a deux fichiers .cpp dans le projet. Et MSBUILD a construit les deux fichiers. Alors pourquoi n'a-t-il pas passé les deux fichiers sur l'éditeur de liens. Le fichier .vcxproj ne traite pas les fichiers .cpp différemment. Pourquoi MSBUILD n'inclut pas les deux fichiers sur l'étape de liaison? Étrangement
<ItemGroup>
<ClCompile Include="FTTrace.cpp" />
<ClCompile Include="TraceImpl.cpp" />
</ItemGroup>