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 !

0voto

Hossein Points 1789

Mon problème était que dans les projets Properties>C/C++>CommandLine J'avais mal spécifié l'interrupteur. C'est-à-dire qu'au lieu d'écrire /D_HASHING_BUILD_DLL J'avais écrit /D_Hashing_BUILD_DLL .

Note complémentaire :
C'est ainsi que je construis mon DLL / Lib dans Visual studio : (et mon Hashing.h ressemble à ceci : )

#ifndef HASHING_H
#define HASHING_H

/* If we are we on Windows, we want a single define for it.*/
#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__))
#define _WIN32
#endif /* _WIN32 */

#if defined(_WIN32) && defined(_HASHING_BUILD_DLL)
/* We are building Hashing as a Win32 DLL */
#define HASHING_API __declspec(dllexport)
#elif defined(_WIN32) && defined(HASHING_DLL)
/* We are calling Hashing as a Win32 DLL */
#define HASHING_API __declspec(dllimport)
#elif defined(__GNUC__) && defined(_HASHING_BUILD_DLL)
/* We are building Hashing as a shared / dynamic library */
#define HASHING_API __attribute__((visibility("default")))
#else
/* We are building or calling HASHING as a static library */
#define HASHING_API
#endif

//your inlcudes

class HASHING_API MyClass
{
//...
};

#endif // !HASHING_H

et dans le chemin que j'ai indiqué plus tôt, j'utilise simplement le commutateur que j'ai défini ici et voilà, la DLL est construite correctement !

0voto

LNW Points 3

Je ne suis pas très familier avec le C++ et j'ai eu le même problème. J'ai pensé partager ce qui a fonctionné pour moi. Il semble que l'import/export doive venir après la déclaration de classe, selon la page suivante. https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4091?view=msvc-160

// Warning C4091
// No error but didn't produce a .lib file
__declspec(dllimport) class X {};

// __declspec attribute after the class or struct keyword
// applies to user defined type worked
class __declspec(dllimport) X3 {};

0voto

David Constantine Points 111

Parfois, lorsque vous vous lancez dans un nouveau projet, la raison pour laquelle le fichier .lib n'est pas créé peut être un problème de "jeux antérieurs". J'étais en train de créer un nouveau .dll mais avant de décider d'utiliser #define avec __declspec(dllexport)/__declspec(dllimport) j'ai essayé de jouer avec .def. Après avoir supprimé le fichier .def, il a probablement laissé une mauvaise configuration dans le fichier du projet et il ne créait pas le fichier .lib... Jusqu'à ce que je décide de supprimer complètement le projet et de le recréer - et walla, ça marche parfaitement !

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