68 votes

La construction a réussi, mais aucun fichier .lib n'a été créé.

J'ai hérité d'une quantité importante de code, y compris un projet Visual Studio qui est censé (pour autant que je sache) construire un fichier .lib. Visual studio dit "... Generating Code... Création de la bibliothèque... Creating browse information file...", et à la fin, il dit que la construction a réussi. Dans le dossier release/debug, il y a un tas de fichiers .obj, mais il n'y a pas de fichier .lib. Qu'est-ce qui pourrait me manquer ?

Merci de votre attention !

3voto

Crubuntu Points 33

Si les méthodes que vous souhaitez exporter se trouvent dans une classe, vous devez __declspec(dllexport) sur la classe. Sinon, aucun fichier .lib ne sera créé.

2voto

CHendrix Points 168

Je viens de rencontrer ce problème également.

Ce problème est dû à l'utilisation d'une macro invalide dans la définition du répertoire de sortie. Dans mon cas, il s'agissait de enter image description here

alors qu'il aurait dû être

enter image description here

J'ai dû effacer le chemin complet dans la deuxième capture d'écran. J'avais une macro incorrecte. J'utilisais MsBuildProjectDir alors que j'aurais dû utiliser MsBuildProjectDirectory . La zone de texte en lecture seule affiche le chemin d'accès complet (ex : C:\Development\blah\blah\blah\ ) lorsque le répertoire de sortie est valide. Si le répertoire de sortie n'est pas valide, vous obtiendrez quelque chose comme la première capture d'écran.

2voto

Gravitas Points 11

Dans le projet DLL, mettez __declspec (dllexport) début des méthodes définies dans les fichiers .h et .cpp.

Après tout, compilez à nouveau votre dll, de sorte que le fichier .lib sera généré et prêt pour l'édition de liens.

put Class Foo
{
public:
    __declspec(dllexport) int GetFoo() const;

2voto

zadane Points 934

J'exportais une classe à partir de la dll mais j'avais déclaré la classe en ligne dans le fichier .h. Le fichier .cpp était là mais il n'y avait pas de classe. Le fichier .cpp était présent mais vide. Cette configuration faisait que le fichier .lib n'était pas généré.

J'ai déplacé l'implémentation des fonctions dans le fichier .cpp et maintenant le fichier lib est généré.

Il s'agit de VS2019.

0voto

Elliot Woods Points 347

J'ai eu le même problème avec VS2019. Dans mon cas, j'ai construit plusieurs fois sans définir de symboles (c'est-à-dire que les fichiers cpp étaient vides).

Après avoir ajouté des définitions de symboles dans les fichiers cpp, j'ai commencé à remarquer ce problème (aucun fichier lib n'était généré).

Un simple nettoyage via "Reconstruire tout" a réglé le problème. Peut-être que si vous compilez alors qu'il n'y a pas de symboles définis, quelque chose est mis en cache quelque part pour indiquer que vous avez une DLL de produit vide, et vous devez nettoyer la solution pour réinitialiser cet état mis en cache.

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