66 votes

Comment puis-je construire une bibliothèque d'importation (.lib) ET d'une DLL dans Visual C++?

Je veux avoir un seul projet Visual Studio qui crée un fichier DLL et d'une bibliothèque d'importation (.lib) fichier. (Une bibliothèque d'importation est liée de manière statique de la bibliothèque qui prend en charge le chargement de ce fichier DLL dans d'autres projets qui l'utilisent).

Je suis donc allé à Visual Studio C++ 2008 Express Edition, a créé un Nouveau Projet de type Bibliothèque de classes, et de définir le "Type de Configuration" à "Dyanamic Bibliothèque (.dll)".

Mais quand j'ai créer la solution, la seule du fichier de sortie que je vois est un fichier DLL; je ne vois pas de fichier LIB arriver généré. J'ai regardé dans le répertoire du projet et de tous les sous-répertoires (Release et Debug).

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

Alors, comment puis-je le faire?

79voto

Michael Burr Points 181287

Est-ce que votre projet de DLL avez des exportations réelles? Si il n'y a pas d'exportations, l'éditeur de liens ne sera pas générer une bibliothèque d'importation .fichier lib.

Dans la version Express de VS, l'importation des bibliothèques nom est specfied dans les paramètres du projet ici:

Configuration Properties/Linker/Advanced/Import Library

Je suppose que c'est la même chose dans l'Express (même s'il offre la possibilité de configurer le nom).

31voto

The Thom Points 2399

OK, donc j'ai trouvé la réponse à partir d' http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ dit que ce problème a été causé par ne pas exporter les symboles et plus instruit sur la façon d'exporter les symboles pour créer le fichier lib. Pour ce faire, ajoutez le code suivant à votre .h de fichier pour votre fichier DLL.

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

Où BARNABY_EXPORTS et BARNABY_API sont uniques définitions pour votre projet. Ensuite, chaque fonction, vous pouvez exporter vous suffit de précéder par:

BARNABY_API int add(){
}

Ce problème aurait pu être évité, soit en cliquant sur l'Exportation de Symboles de la boîte de sur le nouveau projet DLL Assistant ou par vote oui pour les lobotomies pour les programmeurs informatiques.

23voto

Joe Points 2337

En sélectionnant l'option "Bibliothèque de classes" vous avez été accidentellement lui dire de faire une .Net de la Bibliothèque à l'aide de la CLI (réussi) extenstion de C++.

Au lieu de cela, créer un projet Win32, et dans les Paramètres de l'Application sur la page suivante, choisissez "DLL".

Vous pouvez également faire une DLL MFC ou ATL DLL à partir de ceux de la bibliothèque de choix si vous voulez aller dans cette voie, mais il semble que vous n'avez pas.

8voto

Chris Long Gue Points 41

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

Configuration > Propriétés/Input/Avancé/Module > Fichier De Définition De

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X