2010-06-01 3 views
1

Je suis de retour en C/C++ après quelques temps de pause. J'ai un problème suivant:C++ lien externe non résolu symbole (encore;) à partir d'un autre fichier source fichier * .obj. (VC++ express)

J'ai une solution où j'ai plusieurs projets (compilables et reliables). Maintenant, je dois ajouter un autre projet à cette solution qui dépend de certaines sources d'autres projets.

Mon nouveau projet compile sans aucun problème (j'ai ajouté des "sources existantes" à mon projet).

l'erreur:

1>Linking... 
1>LicenceManager.obj : error LNK2019: unresolved external symbol "int __cdecl saveLic(char *,struct Auth *)" ([email protected]@[email protected]@@Z) referenced in function "public: void __thiscall LicenceManager::generateLicence(int,char *)" ([email protected]@@[email protected]) 
1>LicenceManager.obj : error LNK2019: unresolved external symbol "void __cdecl getSysInfo(struct Auth *)" ([email protected]@[email protected]@@Z) referenced in function "public: void __thiscall LicenceManager::generateLicence(int,char *)" ([email protected]@@[email protected]) 

Fonctions saveLic et GetSysInfo sont définis dans les fichiers que je l'ai ajouté à mon nouveau projet de ceux qui existent déjà. Il y a un fichier objet créé lors de la compilation avec ces fonctions dans le répertoire cible, mais ma classe LicenceManager ne veut pas lier.

J'utilise quelques

extern "C" , and #pragma pack

quelque part, mais pas de choses plus de fantaisie. Je pense que chaque répertoire, lib et autres dépendances nécessaires sont visibles dans les paramètres de ce projet.

Merci pour tout conseil.

+0

Lorsque je vois différentes conventions d'appel dans l'appelant et l'appelé, êtes-vous sûr qu'ils ont les bonnes valeurs? – Pieter

Répondre

2

On dirait que vous devez vous assurer que les fonctions sont correctement déclarées comme des fonctions C:

#ifdef __cplusplus 
extern "C" { 
#endif 

int saveLic(char *,struct Auth *); 
void getSysInfo(struct Auth *); 

#ifdef __cplusplus 
} 
#endif 

Dans un fichier d'en-tête inclus par LicenceManager.cpp.

+0

Cependant, j'ai à modifier LincenceManager.h et ajouter #include extern « C » { \t #include « existingFileWithFunctionsThatDontwantToLink.h » } acclamations – bua

+0

Si vous ne pouvez pas modifier l'entête d'origine où ces fichiers sont déclaré pour une raison quelconque, c'est une option. Je préférerais corriger la source du problème si :) – harald

Questions connexes