Automatischer Symbolexport für DLLs ohne explizite Deklarationen
In Visual Studio 2005 können Sie alle Symbole automatisch aus einer DLL exportieren, ohne __declspec manuell hinzuzufügen (dllexport)-Attribute oder das Erstellen von .def-Dateien. So geht's:
Verwenden von CMake (empfohlen)
- Installieren Sie die neueste Entwicklungsversion von CMake (cmake-3.3.20150721-g9cd2f-win32-x86.exe). oder höher).
- Erstellen Sie ein CMake-Projekt mit CMakeLists.txt-Datei.
- Fügen Sie die folgende Zeile zur CMakeLists.txt-Datei hinzu:
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
Nach dem Login kopieren
- Generieren Sie das Visual Studio-Projekt mit CMake (cmake-gui) und kompilieren.
Vorteile:
- Diese Methode erfordert keine expliziten Exportmakros in Klassen oder Funktionen.
- Es macht die manuelle Erstellung von .def überflüssig Dateien.
Hinweis: Whole Program Optimization (/GL) kann mit diesem Ansatz nicht verwendet werden.
Erstellen einer .def-Datei mit Objektdateiinformationen
Als Alternative zum CMake-Ansatz können Sie wie folgt manuell eine .def-Datei erstellen Schritte:
- Erstellen Sie eine statische Bibliothek aus dem Code, den Sie exportieren möchten.
- Verwenden Sie dumpbin /LINKERMEMBER, um Exporte aus der statischen Bibliothek zu extrahieren.
- Parsen Sie die Ausgabe von dumpbin und erstellen Sie eine .def-Datei.
- Verknüpfen Sie die DLL mit der .def Datei.
Vorteile:
- Ermöglicht eine genauere Kontrolle über den Symbolexport.
Nachteile:
- Erfordert manuelle Erstellung einer statischen Bibliothek, Dumpbin-Analyse und Schreiben von .def-Dateien.
- Ist möglicherweise nicht so effizient wie der CMake-Ansatz.
Zusätzliche Tipps:
- Wenn Sie den Klassenexportansatz verwenden, fügen Sie __declspec(dllexport) oder extern „C“ hinzu. __declspec(dllexport) zur Klassen- oder Methodendeklaration.
- Erwägen Sie die Verwendung von %2 anstelle von __cdecl in der .def-Datei, um die Kompatibilität mit älteren Versionen von Windows zu gewährleisten.
- Stellen Sie sicher, dass die Einstellungen für die Namensverknüpfung vorhanden sind Konsistenz zwischen dem Code und der .def-Datei (falls manuell erstellt).
Das obige ist der detaillierte Inhalt vonWie kann ich automatisch alle Symbole aus einer DLL in Visual Studio exportieren, ohne __declspec(dllexport)- oder .def-Dateien zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!