Ich möchte ein einzelnes Visual Studio-Projekt haben, das eine DLL-Datei und eine Importbibliotheksdatei (.lib) erstellt. (Eine Importbibliothek ist eine statisch verknüpfte Bibliothek, die das Laden dieser DLL-Datei in andere Projekte übernimmt, die sie verwenden.)
Also ging ich zu Visual Studio C ++ 2008 Express Edition, erstellte ein neues Projekt vom Typ Klassenbibliothek und setzte den "Konfigurationstyp" auf "Dyanamic Library (.dll)".
Wenn ich die Lösung erstelle, ist die einzige relevante Ausgabedatei, die ich sehe, eine DLL-Datei. Ich sehe keine LIB-Datei, die generiert wird. Ich habe im Projektverzeichnis und in allen Unterverzeichnissen (Release und Debug) gesucht.
Ich glaube, dass es möglich ist, eine LIB und eine DLL-Datei gleichzeitig zu erstellen, da auf der MSDN steht: "Der Linker erstellt die Importbibliothek, wenn die DLL erstellt wird." Ein anderer Benutzer dieser Website erstellt gleichzeitig LIB- und DLL-Dateien mit Visual C ++ .
Wie kann ich das machen?
quelle
Antworten:
Durch Auswahl von 'Klassenbibliothek' haben Sie versehentlich angewiesen, eine .NET-Bibliothek mit der CLI-Erweiterung (verwaltet) von C ++ zu erstellen.
Erstellen Sie stattdessen ein Win32-Projekt und wählen Sie in den Anwendungseinstellungen auf der nächsten Seite "DLL".
Sie können aus diesen Bibliotheksoptionen auch eine MFC-DLL oder eine ATL-DLL erstellen, wenn Sie diesen Weg gehen möchten, aber es hört sich so an, als ob Sie dies nicht tun.
quelle
Hat Ihr DLL-Projekt tatsächlich Exporte? Wenn keine Exporte vorhanden sind, generiert der Linker keine .lib-Datei der Importbibliothek.
In der Nicht-Express-Version von VS wird der Name des Import-Librays in den Projekteinstellungen hier angegeben:
Ich gehe davon aus, dass es in Express dasselbe ist (wenn es sogar die Möglichkeit bietet, den Namen zu konfigurieren).
quelle
__declspec(dllexport)
Attribut markiert sind ?OK, also fand ich die Antwort von http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ , dass dieses Problem besagt wurde dadurch verursacht, dass keine Symbole exportiert wurden und weitere Anweisungen zum Exportieren von Symbolen zum Erstellen der lib-Datei gegeben wurden. Fügen Sie dazu der .h-Datei für Ihre DLL den folgenden Code hinzu.
#ifdef BARNABY_EXPORTS #define BARNABY_API __declspec(dllexport) #else #define BARNABY_API __declspec(dllimport) #endif
Wobei BARNABY_EXPORTS und BARNABY_API eindeutige Definitionen für Ihr Projekt sind. Dann geht jeder Funktion, die Sie exportieren, einfach Folgendes voraus:
BARNABY_API int add(){ }
Dieses Problem hätte entweder durch Klicken auf das Feld Symbole exportieren im DLL-Assistenten für neue Projekte oder durch Ja-Stimmen für Lobotomien für Computerprogrammierer verhindert werden können.
quelle
Sie sollten hier auch den Def-Namen in den Projekteinstellungen angeben:
Konfiguration> Eigenschaften / Eingabe / Erweitert / Modul> Definitionsdatei
quelle
Configuration Properties
/Linker
/Input
/Module Definition File
in VS2010