2010-09-09 8 views
5

J'ai juste un problème que j'ai essayé de fixer le plus longtemps.Comment lier un fichier .lib dans Visual C++ 2010? Sans faire référence au projet?

J'ai un projet de bibliothèque statique en C++ visuel, et je veux qu'un autre projet puisse s'y lier. Jusqu'à présent, j'ai simplement ajouté une référence au projet de bibliothèque statique, qui relie automatiquement la bibliothèque.

Je souhaite pouvoir créer un lien vers la bibliothèque en utilisant uniquement les fichiers d'en-tête et le fichier .lib. Cependant, j'obtiens une erreur "Unresolved external symbol".

Je pensais que je faisais bien - j'ai spécifié le répertoire include, le répertoire de la bibliothèque, et je suis entré dans les propriétés de l'éditeur de liens et j'ai fourni la lib comme dépendance supplémentaire.

Je suis capable de référencer d'autres bibliothèques statiques de cette façon (comme SDL), alors pourquoi ai-je des erreurs quand j'essaie de référencer le mien?

Merci pour l'aide.

Le problème est-il que ce n'est pas le référencement du fichier lib réel, ou quelque chose dans la lib elle-même? Ce sont les messages d'erreur que je reçois:

Erreur 2 Erreur LNK2019: symbole externe non résolu "public: __thiscall vide XEngine :: XCore :: :: Xscreen init (classe XEngine :: XCore :: Xgame &)" (? init @ XScreen @ XCore @ XEngine @@ QAEXAAVXGame @ 23 @@ Z) référencé dans la fonction "void __cdecl XEngine :: XEngineInit (classe XEngine :: XCore :: XScreen &, classe XEngine :: XCore :: XGame &)" (? XEngineInit @ XEngine @@ YAXAAVXScreen @ XCore @ 1 @ AAVXGame @ 31 @@ Z) C: \ Utilisateurs \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projets \ Pong \ Pong \ source.obj Pong

Erreur 3 erreur LNK2019 : symbole externe non résolu "public: __thiscall XEngine :: XCore :: XScreen :: ~ XScreen (void)" (?? 1XScreen @ XCore @ XEngi ne @@ QAE @ XZ) référencé dans la fonction "void __cdecl XEngine :: XEngineInit (classe XEngine :: XCore :: XGame &)" (? XEngineInit @ XEngine @@ YAXAAVXGame @ XCore @ 1 @@ Z) C: \ Users \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projets \ Pong \ Pong \ source.obj Pong

Erreur 4 Erreur LNK2019: symbole externe non résolu "public: __thiscall XEngine :: XCore :: XScreen :: XScreen (void)" (?? 0XScreen @ XCore @ XEngine @@ QAE @ XZ) référencé dans la fonction "void __cdecl XEngine :: XEngineInit (classe XEngine :: XCore :: XGame &)" (? XEngineInit @ XEngine @@ YAXAAVXGame @ XCore @ 1 @@ Z) C: \ Utilisateurs \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projets \ Pong \ Pong \ source.obj Pong

+0

Il devrait fonctionner comme vous le décrivez. Veuillez donner un échantillonnage (pertinent et concis) des erreurs? –

Répondre

4

Assurez-vous que vous exportez les fonctions, les classes et les variables dans votre bibliothèque. à vous voulez exposé à d'autres applications (c.-à-d. votre DLL ou exe). Par défaut, ils ne sont pas exposés.

Le travail de base pour ce faire est généralement mis en page lorsque vous créez le projet pour votre bibliothèque.

#ifdef TESTLIB_EXPORTS 
#define TESTLIB_API __declspec(dllexport) 
#else 
#define TESTLIB_API __declspec(dllimport) 
#endif 

Avec le code ci-dessus généré lors de la création du projet, il n'y a que deux choses à faire pour moi pour exposer les fonctions, classes ou variables:

1) Assurez-vous que je TESTLIB_EXPORTS définis comme un préprocesseur .Paramètres du projet: C++/préprocesseur/PreprocessorDefinitions

2) Utilisez les TESTLIB_API définissent sur chaque fonction, classe ou une variable que je veux exposée:

class TESTLIB_API Order { 
    void doSomething(); 
}; 
+0

Est-ce vraiment la bonne façon? Il essaye de construire un .lib statique avec lequel faire un lien, alors pourquoi aurait-il besoin de dllexports? J'étais sous l'impression que ceux-ci étaient seulement nécessaires pour créer une DLL. – Ben

Questions connexes