Maison > développement back-end > C++ > le corps du texte

Comment puis-je exporter automatiquement tous les symboles lors de la création d'une DLL dans Visual Studio à l'aide de CMake ?

Linda Hamilton
Libérer: 2024-11-24 03:58:09
original
583 Les gens l'ont consulté

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

Exportation automatique de symboles dans la création de DLL

Introduction

Lors de la création d'une DLL dans Visual Studio 2005, il peut être gênant d'exporter manuellement des symboles individuels ou utilisez les fichiers de définition de module (.def). Cet article propose une solution pour exporter automatiquement tous les symboles sans nécessiter de déclarations fastidieuses.

Solution : fonctionnalité CMake

La dernière version de CMake (>= 3.3.20150721-g9cd2f) propose une fonctionnalité qui permet exportation automatique des symboles. En ajoutant set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) au fichier CMakeLists.txt, le compilateur exporte tous les symboles sans avoir besoin d'annotations manuelles.

Avantages et limitations

Avantages :

  • Simplifie considérablement l'exportation de symboles, éliminant le besoin de __declspec(dllexport) ou de création manuelle de fichiers .def.

Limitations :

  • Non disponible dans les anciennes versions de CMake.
  • L'optimisation de l'ensemble du programme (/GL) n'est pas compatible avec le symbole automatique exportation.

Explication détaillée

CMake utilise l'approche suivante :

  1. Lors de la compilation, il génère un fichier "objects.txt" contenant des informations sur le Fichiers .obj utilisés dans la DLL.
  2. Il analyse les fichiers .obj pour extraire le symbole informations.
  3. Sur la base de ces informations, il crée un fichier .def contenant les symboles exportés.
  4. La DLL est ensuite liée au fichier .def pour exporter automatiquement les symboles.

Exemple d'utilisation

Pour utiliser cette fonctionnalité, créez un projet CMake avec le fichier CMakeLists.txt suivant file :

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 ...)
Copier après la connexion

Compilez le projet et la DLL sera créée avec tous les symboles automatiquement exportés.

Approches alternatives

Il existe d'autres méthodes pour exporter des symboles, telles que as :

  • Exportation manuelle : Ajout __declspec(dllexport) vers les déclarations de fonctions et de classes.
  • Utilisation des bibliothèques statiques et de Dumpbin : Vider les symboles d'une bibliothèque statique et créer un fichier .def pour les exporter.
  • Utiliser des outils tiers : Utiliser des outils comme lib ou ldd pour exporter symboles.

Cependant, ces approches peuvent prendre plus de temps ou avoir des limites par rapport à la solution CMake.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal