Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann ich beim Erstellen einer DLL in Visual Studio mit CMake automatisch alle Symbole exportieren?

Linda Hamilton
Freigeben: 2024-11-24 03:58:09
Original
558 Leute haben es durchsucht

How Can I Automatically Export All Symbols When Creating a DLL in Visual Studio Using CMake?

Symbole automatisch bei der DLL-Erstellung exportieren

Einführung

Beim Erstellen einer DLL in Visual Studio 2005 kann es umständlich sein, einzelne Symbole oder manuell zu exportieren Verwenden Sie Moduldefinitionsdateien (.def). Dieser Artikel bietet eine Lösung zum automatischen Exportieren aller Symbole, ohne dass langwierige Deklarationen erforderlich sind.

Lösung: CMake-Funktion

Die neueste CMake-Version (>= 3.3.20150721-g9cd2f) bietet eine Funktion, die dies ermöglicht Automatischer Symbolexport. Durch Hinzufügen von set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) zur Datei CMakeLists.txt exportiert der Compiler alle Symbole, ohne dass manuelle Anmerkungen erforderlich sind.

Vorteile und Einschränkungen

Vorteile:

  • Vereinfacht das Symbol erheblich Export, wodurch die Notwendigkeit einer __declspec(dllexport) oder manuellen .def-Dateierstellung entfällt.

Einschränkungen:

  • Nicht verfügbar in älteren CMake-Versionen.
  • Whole Program Optimization (/GL) ist nicht mit dem automatischen Symbol kompatibel Export.

Detaillierte Erklärung

CMake verwendet den folgenden Ansatz:

  1. Während der Kompilierung generiert es eine „objects.txt“-Datei mit Informationen über In der DLL verwendete .obj-Dateien.
  2. Es analysiert die .obj-Dateien, um das Symbol zu extrahieren Informationen.
  3. Basierend auf diesen Informationen wird eine .def-Datei erstellt, die die exportierten Symbole enthält.
  4. Die DLL wird dann mit der .def-Datei verknüpft, um die Symbole automatisch zu exportieren.

Verwendungsbeispiel

Um diese Funktion zu nutzen, erstellen Sie ein CMake-Projekt mit der folgenden CMakeLists.txt Datei:

cmake_minimum_required(VERSION 2.6)
project(myproject)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

set(SOURCE_EXE main.cpp)

include_directories(...)

add_executable(main ${SOURCE_EXE})

target_link_libraries(main ...)
Nach dem Login kopieren

Kompilieren Sie das Projekt und die DLL wird mit allen automatisch exportierten Symbolen erstellt.

Alternative Ansätze

Es gibt andere Methoden zum Exportieren von Symbolen, z als:

  • Manuell exportieren:Hinzufügen __declspec(dllexport) zu Funktions- und Klassendeklarationen.
  • Verwendung statischer Bibliotheken und Dumpbin:Symbole aus einer statischen Bibliothek ausgeben und eine .def-Datei erstellen, um sie zu exportieren.
  • Verwendung von Tools von Drittanbietern:Verwendung von Tools wie lib oder ldd zum Exportieren Symbole.

Diese Ansätze können jedoch im Vergleich zur CMake-Lösung zeitaufwändiger sein oder Einschränkungen aufweisen.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Erstellen einer DLL in Visual Studio mit CMake automatisch alle Symbole exportieren?. 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