0

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> 

Répondre

0

, l'erreur est le résultat de la définition de la propriété IMPLIB à une mauvaise valeur. La feuille de propriétés a déclaré: <ImpLib>$(OneOfMyPathVars)\%(Filename).lib</Implib>. Comme% (Filename) était vide pendant l'étape de liaison, "C: \ foo.lib" ne crée aucune ImpLib. Et cela a causé les externes non résolus des fonctions déclarées dans le projet. Probablement un bug dans l'éditeur de liens mais c'était auto-infligé.

Questions connexes