La bibliothèque de liaison dynamique ne génère pas un .fichier lib lors de la compilation (Visual Studio C++ Express)
Dans le cadre de l'apprentissage du C++, j'ai écrit une bibliothèque de classe simple + application qui fait référence à elle. Tout s'appuie, à l'exception de la bibliothèque de classe ne génère pas un .fichier lib, qui résultats dans l'application à lancer un "LINK : fatal error LNK1104: impossible d'ouvrir le fichier". Ce qui semble très raisonnable; évidemment, si un fichier n'est pas là, il y a une erreur et elle est mortelle. (Note: je n'ai pas de livre encore)
Donc, je suis allé à la recherche pour des raisons un .lib fichier ne peut pas être généré. Ma recherche-fu, en passant, est plutôt faible. Tout ce que je ai trouvé était que, si la bibliothèque n'a pas tout __declspec(dllexport) des balises, il ne serait pas exporter un .lib.
Je doit maintenant afficher l'en-tête et .rpc contenu de la bibliothèque de classe (Un simple "Console" de la classe avec une "Écriture(std::string)" méthode).
En-tête:
//Extensions.h
#pragma once
#include "stdafx.h"
namespace Extensions {
__declspec(dllexport) class Console
{
public:
__declspec(dllexport) static void Write(std::string text);
};
}
Je ne suis pas sûr que j'ai besoin de balise de la fonction lorsque j'ai marqué la classe, mais je peux vérifier que quand il fonctionne.
Et la .fichier cpp:
//This is the main DLL file.
#include "stdafx.h"
//#include "Console.h"
namespace Extensions {
void Console::Write(std::string text)
{
std::cout << text.c_str();
}
}
J'ai vérifié et il est configuré pour générer une bibliothèque de liens dynamiques.
Grâce.
- Pourquoi est - / / #include "de la Console.h" en commentaire? Comment compiler?
- C'est #include d "stdafx.h". Notamment dans "Console.cpp" les résultats dans un "défini deux fois par erreur".
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de code qui montre comment correctement l'exportation d'une classe. Attention à la CONSOLETEST_EXPORT macro. C'est la partie manquante de votre solution. Vous devez définir cette macro dans votre projet de DLL, et le laisser à l'indéfini dans les projets qui font référence à cette dll.
Découvrez cet article sur codeproject pour plus de détails.
Comment faire pour Exporter des classes C++ à partir d'une DLL
PROJECTNAME_EXPORTS
sousProperties > C/C++ > Preprocessor > Preprocessor Definitions
. Donc, dans ce cas, vous devez modifier le début de la macro à#ifdef CONSOLETEST_EXPORTS
(notez le " S " à "EXPORTATIONS").