ホームページ  >  記事  >  バックエンド開発  >  手動で定義せずに CMake の DLL からすべてのシンボルをエクスポートするにはどうすればよいですか?

手動で定義せずに CMake の DLL からすべてのシンボルをエクスポートするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-24 16:21:28516ブラウズ

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

DLL の作成時にすべてのシンボルをエクスポートする方法

Visual Studio 2005 では、__declspec(dllexport) を手動で追加したり、.def ファイルを作成したりせずに、DLL からすべてのシンボルをエクスポートします。課題を提起します。幸いなことに、これは最新の 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 ファイルを作成します。
  • シンボルをエクスポートしますCMake を使用した .obj ファイル:

    • CMake プロジェクトで set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) を使用します。
    • CMake は、Pre 実行中に .obj ファイルからシンボルを抽出し、.def ファイルを動的に作成します。 -リンクevent.

CMake を使用しない場合:

  • .obj ファイルを手動で解析してシンボルを抽出し、.def を作成します。 file.

注: CMake メソッドを使用してシンボルをエクスポートする場合は、プログラム全体の最適化 (/GL) を無効にします。

以上が手動で定義せずに CMake の DLL からすべてのシンボルをエクスポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。