Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann ich alle Symbole aus einer DLL in CMake exportieren, ohne sie manuell zu definieren?

Linda Hamilton
Freigeben: 2024-11-24 16:21:28
Original
507 Leute haben es durchsucht

How Can I Export All Symbols from a DLL in CMake Without Manually Defining Them?

So exportieren Sie alle Symbole beim Erstellen einer DLL

In Visual Studio 2005 können Sie alle Symbole aus einer DLL exportieren, ohne __declspec(dllexport) manuell hinzuzufügen oder .def-Dateien zu erstellen stellt eine Herausforderung dar. Glücklicherweise kann dies jetzt mit der neuesten CMake-Version (cmake-3.3.20150721-g9cd2f-win32-x86.exe oder höher) erreicht werden.

Kurze Antwort

Um alle Symbole automatisch zu exportieren eine DLL, setzen Sie CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS in Ihrem CMake auf ON Projekt:

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
Nach dem Login kopieren

Lange Antwort

1. Exportieren Sie Symbole mit __declspec(dllexport)

  • Fügen Sie __declspec(dllexport) zu den zu exportierenden Klassen und Methoden hinzu.
  • Exportieren Sie als C-Funktionen mit extern „C“, wenn Sie ein C verwenden Compiler zum Exportieren von C-Funktionen.

2. Erstellen Sie eine Moduldefinitionsdatei (.def)

  • Exportieren Sie C-Funktionen, indem Sie Funktionsdeklarationen in der .def-Datei hinzufügen.
  • Exportieren Sie Symbole aus einer statischen Bibliothek mit dumpbin/LINKERMEMBER um die Ausgabe zu analysieren und eine .def-Datei zu erstellen.
  • Exportieren Sie Symbole aus .obj-Dateien mit CMake:

    • Verwenden Sie set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) in Ihrem CMake-Projekt.
    • CMake extrahiert Symbole aus .obj-Dateien und erstellt während des Pre-Links dynamisch eine .def-Datei Ereignis.

Ohne CMake:

  • Parsen Sie .obj-Dateien manuell, um Symbole zu extrahieren und eine .def-Datei zu erstellen.

Hinweis: Deaktivieren Sie die Optimierung des gesamten Programms (/GL) bei Verwendung der CMake-Methode zum Exportieren von Symbolen.

Das obige ist der detaillierte Inhalt vonWie kann ich alle Symbole aus einer DLL in CMake exportieren, ohne sie manuell zu definieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage