web-dev-qa-db-fra.com

Comment créer une bibliothèque d'importation (.lib) ET un DLL dans Visual C ++?)

Je souhaite avoir un seul projet Visual Studio qui crée un fichier DLL et un fichier de bibliothèque d'importation (.lib). (Une bibliothèque d'importation est une bibliothèque liée statiquement qui se charge de = DLL fichier dans les autres projets qui l'utilisent).

Je suis donc allé dans Visual Studio C++ 2008 Express Edition, j'ai créé un nouveau projet de type bibliothèque de classes et défini le "Type de configuration" sur "Bibliothèque Dyanamic (.dll)".

Mais lorsque je construis la solution, le seul fichier de sortie pertinent que je voie est un fichier DLL; je ne vois pas de fichier LIB être généré. J'ai consulté le répertoire du projet et tous les sous-répertoires (Release et débogage).

Je crois qu'il est possible de construire une LIB et un fichier DLL en même temps parce que sur le MSDN, il est écrit "L'éditeur de liens crée la bibliothèque d'importation lorsque DLL est construit. " Aussi, n autre utilisateur de ce site crée actuellement les fichiers LIB et DLL au même moment, à l’aide de Visual C++ .

Alors, comment puis-je le faire?

65
David Grayson

En sélectionnant "Bibliothèque de classes", vous lui avez accidentellement demandé de créer une bibliothèque .Net à l'aide de l'extension CLI (gérée) du C++.

Au lieu de cela, créez un projet Win32 et, dans les paramètres de l'application de la page suivante, choisissez "DLL".

Vous pouvez également créer un MFC DLL ou ATL DLL à partir de ces choix de bibliothèque si vous souhaitez suivre cette voie, mais cela ne semble pas vous aller.).

22
Joe

Votre projet DLL a-t-il des exportations réelles? S'il n'y a pas d'exportations, l'éditeur de liens ne générera pas de fichier .lib de bibliothèque d'importation.

Dans la version non-Express de VS, le nom de la bibliothèque d'importation est spécifié dans les paramètres du projet:

Configuration Properties/Linker/Advanced/Import Library

Je suppose que c'est la même chose dans Express (si cela permet même de configurer le nom).

76
Michael Burr

OK, alors j'ai trouvé la réponse de http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ indique que ce problème est dû au fait qu’il n’exporte aucun symbole et explique également comment exporter les symboles pour créer le fichier lib. Pour ce faire, ajoutez le code suivant à votre fichier .h pour votre DLL.

#ifdef BARNABY_EXPORTS
#define BARNABY_API __declspec(dllexport)
#else
#define BARNABY_API __declspec(dllimport)
#endif

Où BARNABY_EXPORTS et BARNABY_API sont des définitions uniques pour votre projet. Ensuite, chaque fonction que vous exportez précède simplement:

BARNABY_API int add(){
}

Ce problème aurait pu être évité en cliquant sur la zone Symboles d'exportation du nouveau projet DLL Wizard ou par l'assistant $ === ou par un vote positif pour les lobotomies des programmeurs.).

29
Thom

vous devez également spécifier le nom du fichier def dans les paramètres du projet:

Configuration> Propriétés/Entrée/Avancé/Module> Fichier de définition

8
Chris Long Gue