首頁 > 後端開發 > C++ > 如何在 CMake 中從 DLL 匯出所有符號而不手動定義它們?

如何在 CMake 中從 DLL 匯出所有符號而不手動定義它們?

Linda Hamilton
發布: 2024-11-24 16:21:28
原創
581 人瀏覽過

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

建立DLL 時如何匯出所有符號

在Visual Studio 2005 中,從DLL 匯出所有符號,無需手動新增__declspec(dllexport) 或建立.def 文件提出了挑戰。幸運的是,現在可以使用最新的 CMake 版本(cmake-3.3.20150721-g9cd2f-win32-x86.exe 或更高版本)來實現這一點。

簡答

自動匯出中的所有符號DLL,在CMake 中將CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 設定為ON項目:

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
登入後複製

長答案

長答案

1。使用 __declspec(dllexport) 導出符號

  • 將 __declspec(dllexport) 新增至要匯出的類別和方法。
  • 如果使用 C,則使用 extern "C" 匯出為 C 函式編譯器匯出 C 函式。

2.建立模組定義 (.def) 檔案

  • 透過在 .def 檔案中加入函數宣告來匯出 C 函數。
  • 使用 dumpbin/LINKERMEMBER 從靜態庫匯出符號解析輸出並建立 .def 檔案。
  • 使用下列指令從 .obj 檔案匯出符號CMake:

    • 在 CMake 專案中使用 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)。
    • CMake 將從.obj 檔案中提取符號並在預連結期間動態建立.def 檔案

沒有CMake:

  • 手動解析.obj 檔案以提取符號並建立.def 檔案。

注意:停用使用CMake方法匯出符號時的整個程式最佳化(/GL)。

以上是如何在 CMake 中從 DLL 匯出所有符號而不手動定義它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板