Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengeksport Semua Simbol daripada DLL dalam CMake Tanpa Menentukannya Secara Manual?

Bagaimanakah Saya Boleh Mengeksport Semua Simbol daripada DLL dalam CMake Tanpa Menentukannya Secara Manual?

Linda Hamilton
Lepaskan: 2024-11-24 16:21:28
asal
572 orang telah melayarinya

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

Cara Mengeksport Semua Simbol Semasa Mencipta DLL

Dalam Visual Studio 2005, mengeksport semua simbol daripada DLL tanpa menambah __declspec(dllexport) atau mencipta fail .def secara manual menimbulkan cabaran. Nasib baik, ini kini boleh dicapai dengan versi CMake terkini (cmake-3.3.20150721-g9cd2f-win32-x86.exe atau lebih tinggi).

Jawapan Ringkas

Untuk mengeksport semua simbol secara automatik dalam DLL, tetapkan CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS kepada HIDUP dalam CMake anda projek:

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
Salin selepas log masuk

Jawapan Panjang

1. Eksport Simbol Menggunakan __declspec(dllexport)

  • Tambah __declspec(dllexport) ke kelas dan kaedah untuk mengeksport.
  • Eksport sebagai fungsi C menggunakan extern "C" jika menggunakan C pengkompil untuk mengeksport C fungsi.

2. Cipta Fail Definisi Modul (.def)

  • Eksport fungsi C dengan menambahkan pengisytiharan fungsi dalam fail .def.
  • Eksport simbol daripada perpustakaan statik menggunakan dumpbin/LINKERMEMBER untuk menghuraikan output dan mencipta fail .def.
  • Eksport simbol daripada Fail .obj menggunakan CMake:

    • Gunakan set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) dalam projek CMake anda.
    • CMake akan mengekstrak simbol daripada fail .obj dan mencipta fail .def secara dinamik semasa Pra -Pautan acara.

Tanpa CMake:

  • Menghuraikan fail .obj secara manual untuk mengekstrak simbol dan mencipta fail .def.

Nota: Lumpuhkan Pengoptimuman Keseluruhan Program (/GL) apabila menggunakan kaedah CMake untuk mengeksport simbol.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeksport Semua Simbol daripada DLL dalam CMake Tanpa Menentukannya Secara Manual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan