DLLファイルからインポートライブラリを生成

gendef と pexports

gendef と pexport はどちらも、DLL および対応するヘッダー ファイルから情報を抽出し、対応する .def ファイルを作成して、各 DLL で使用可能なシンボルをリストすることができます。次に、dlltool ( binutils )を使用して、.def ファイルを通じて対応するインポート ライブラリ (インポート ライブラリ) を生成すると、DLL 開発者が必要な開発プラットフォームのインポート ライブラリを提供しないという問題を解決できます。

インストール

gendef と pexports は、MinGW (32 ビット) インストール マネージャーを介してインストールできます。
遺伝子定義
輸出
また、上の画像にあるリンクを介して直接ダウンロードすることもできます。
これらは「すべてのパッケージ」カテゴリからのみダウンロード用に選択できるため、その下のサブ項目はリストされず、非常に非表示になります。
MSYS2/MinGW-w64 環境で gendef をクエリしてインストールするコマンド:

pacman -Fy
pacman -F gendef.exe
pacman -S --needed mingw-w64-x86_64-tools-git

ソフトウェアの説明

ここに画像の説明を挿入します

gendef は DLL から情報を抽出して、各 DLL で使用可能なシンボルをリストした対応する .def ファイルを作成できます。.def ファイルは、dlltool (mingw32-binutils) でインポート ライブラリを生成するために使用できます。gendef は pexport に似ていますが、この 2 つのツールは、各シンボルに適切な「装飾」 (または呼び出し規則) を決定する方法が異なります。これは、情報が DLL のシンボル テーブルから常に直接入手できるとは限らないためです。gendef は DLL 内のシンボルのコードを見つけ、逆アセンブラを使用してその情報を特定します。適切なヘッダー ファイルがある場合、pexports は C プリプロセッサを使用して情報を抽出できます。どちらの方法も確実ではないため、両方のツールが提供されています。
gendef は MinGW64 チームによって作成されました。32 ビットまたは 64 ビットの EXE または DLL からシンボルを抽出できます。ヘッダー ファイルや C プリプロセッサを必要とせずに、stdcall、fastcall、および cdecl の呼び出し規約を自動的に検出し、正しく装飾された関数名を生成できます。

説明

pexports は、DLL から情報を抽出して、各 DLL で使用可能なシンボルをリストした対応する .def ファイルを作成できます。.def ファイルは、dlltool (mingw32-binutils) でインポート ライブラリを生成するために使用できます。pexports は gendef に似ていますが、この 2 つのツールは、各シンボルに適切な「装飾」 (または呼び出し規則) を決定する方法が異なります。これは、情報が DLL のシンボル テーブルから常に直接入手できるとは限らないためです。適切なヘッダー ファイルがある場合、pexports は C プリプロセッサを使用して情報を抽出できます。gendef は DLL 内のシンボルのコードを見つけ、逆アセンブラを使用してその情報を特定します。どちらの方法も確実ではないため、両方のツールが提供されています。
pexport が呼び出し規約を検出するには、解析するヘッダーをコマンド ラインで指定する必要があることに注意してください。これらのヘッダーでシンボルが宣言されていない場合、適切な装飾を計算できません。元々は Anders Norlander によって書かれましたが、Tor Lillqvist のおかげで、現在は 32 ビットと 64 ビットの両方の DLL と EXE をサポートしています。

gendef steam_api64.dll
dlltool -D steam_api64.dll -d steam_api64.def -l libsteam_api64.a

最初のステップは、steam_api64.def を生成することです。
2 番目のステップで、「-d steam_api64.def」が欠落している場合、libsteam_api64.a をリンクする際に「'xxx' への未定義の参照」などのエラーが表示されます。

参考

Sourceforge: gendef
Sourceforge: DLL のインポート ライブラリの生成
Sourceforge: MSYS2 gendef が見つかりません
Github:genedef
Github: pexports
GNU binutils

おすすめ

転載: blog.csdn.net/feiyunw/article/details/127813780