Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mengeksport Semua Simbol Secara Automatik Apabila Mencipta DLL dalam Visual Studio Menggunakan CMake?

Bagaimanakah Saya Boleh Mengeksport Semua Simbol Secara Automatik Apabila Mencipta DLL dalam Visual Studio Menggunakan CMake?

Linda Hamilton
Linda Hamiltonasal
2024-11-24 03:58:09584semak imbas

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

Mengeksport Simbol Secara Automatik dalam Penciptaan DLL

Pengenalan

Apabila mencipta DLL dalam Visual Studio 2005, mungkin menyusahkan untuk mengeksport simbol individu secara manual atau gunakan fail definisi modul (.def). Artikel ini menyediakan penyelesaian untuk mengeksport semua simbol secara automatik tanpa memerlukan pengisytiharan yang membosankan.

Penyelesaian: Ciri CMake

Versi CMake terkini (>= 3.3.20150721-g9cd2f) menawarkan ciri yang membolehkan pengeksportan simbol automatik. Dengan menambahkan set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) pada fail CMakeLists.txt, pengkompil mengeksport semua simbol tanpa memerlukan anotasi manual.

Kelebihan dan Had

Kelebihan:

  • Mempermudahkan pengeksportan simbol dengan ketara, menghapuskan keperluan untuk fail __declspec(dllexport) atau manual .def penciptaan.

Kehadan:

  • Tidak tersedia dalam versi CMake yang lebih lama.
  • Pengoptimuman Seluruh Program (/GL) tidak serasi dengan pengeksportan simbol automatik.

Terperinci Penjelasan

CMake menggunakan pendekatan berikut:

  1. Semasa penyusunan, ia menghasilkan fail "objects.txt" yang mengandungi maklumat tentang fail .obj yang digunakan dalam DLL.
  2. Ia menghuraikan fail .obj untuk mengekstrak maklumat simbol.
  3. Berdasarkan maklumat ini, ia mencipta Fail .def yang mengandungi simbol yang dieksport.
  4. DLL kemudiannya dipautkan dengan fail .def untuk mengeksport simbol secara automatik.

Contoh Penggunaan

Untuk menggunakan ini ciri, buat projek CMake dengan fail CMakeLists.txt berikut:

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 ...)

Kompilasikan projek, dan DLL akan dibuat dengan semua simbol dieksport secara automatik.

Pendekatan Alternatif

Terdapat kaedah lain untuk mengeksport simbol, seperti:

  • Secara manual Mengeksport: Menambah __declspec(dllexport) pada fungsi dan kelas pengisytiharan.
  • Menggunakan Perpustakaan Statik dan Tong Sampah: Melambakkan simbol daripada pustaka statik dan mencipta fail .def untuk mengeksportnya.
  • Menggunakan Alat Pihak Ketiga : Menggunakan alatan seperti lib atau ldd untuk mengeksport simbol.

Walau bagaimanapun, pendekatan ini boleh memakan masa yang lebih lama atau mempunyai had berbanding dengan penyelesaian CMake.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeksport Semua Simbol Secara Automatik Apabila Mencipta DLL dalam Visual Studio Menggunakan CMake?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn