ダイナミックリンクライブラリ(DLL)を構築し使用するのに必要なファイルを作 成するために,@command{dlltool}は使用されます.
に立つので,常にバイナリユーティリティの一部として構築されるわけではあり ません.
dlltool [@option{-d}|@option{--input-def} def-file-name]
[@option{-b}|@option{--base-file} base-file-name]
[@option{-e}|@option{--output-exp} exports-file-name]
[@option{-z}|@option{--output-def} def-file-name]
[@option{-l}|@option{--output-lib} library-file-name]
[@option{--export-all-symbols}] [@option{--no-export-all-symbols}]
[@option{--exclude-symbols} list]
[@option{--no-default-excludes}]
[@option{-S}|@option{--as} path-to-assembler] [@option{-f}|@option{--as-flags} options]
[@option{-D}|@option{--dllname} name] [@option{-m}|@option{--machine} machine]
[@option{-a}|@option{--add-indirect}] [@option{-U}|@option{--add-underscore}] [@option{-k}|@option{--kill-at}]
[@option{-A}|@option{--add-stdcall-alias}]
[@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}] [@option{-i}|@option{--interwork}]
[@option{-n}|@option{--nodelete}] [@option{-v}|@option{--verbose}]
[@option{-h}|@option{--help}] [@option{-V}|@option{--version}]
[object-file ...]
@command{dlltool}は,その入力を読み込み,それは,コマンドラインで指定さ れたオブジェクトファイルと,@option{-d}と@option{-b}オプションから成り立 ちます.そして,これらの入力を処理し,@option{-e}オプションが指定されて いる場合は,エクスポートファイルを作成します.@option{-l}オプションが指 定されている場合は,ライブラリファイルを作成し,@option{-z}オプションが 指定されている場合は,defファイルを作成します.@option{-e},@option{-l}, そして@option{-z}オプションのいずれか,またはすべてを,@command{dlltool} の呼び出しに配置することが可能です.
DLLを作成しているとき,DLLのソースファイルとともに,それは三つの他のファ イルが必要です.@command{dlltool}は,これらのファイルの作成を手助けする ことが可能です.
最初のファイルは,DLLからエクスポートされる関数や,DLLがインポートする関 数等を指定する,`.def'ファイルです.これはテキストファイルで,手動 で作成したり,作成するために@command{dlltool}を@option{-z}オプションを用 いて使用したりすることが可能です.この場合,@command{dlltool}は,エクス ポートされるように特別に印の付けられたこれらの関数を探しながら,コマンド ラインで指定されたオブジェクトファイルを走査し,作成する`.def'ファ イルにそれらのエントリーを書き出します.
DLLからエクスポートされるように関数に印を付けるため,オブジェクトファイ ルの`.drectve'セクションに,@option{-export:<name_of_function>}エン トリーが必要です.これは,Cでasm()演算子を使用することで可能となります.
asm (".section .drectve");
asm (".ascii \"-export:my_func\"");
int my_func (void) { ... }
DLLの作成に必要とされる2番目のファイルは,エクスポートファイルです.この ファイルは,DLL本体を作成し,DLLと外部世界の間のインターフェースを取り扱 うオブジェクトファイルとリンクされます.これはバイナリファイルで, @command{dlltool}が`.def'ファイルの作成または読み込みをしているとき に,それに@option{-e}オプションを与えると作成されます.
DLLの作成に必要とされる三番目のファイルは,DLL内の関数にアクセスするため にプログラムとリンクするライブラリファイルです.このファイルは, @command{dlltool}が`.def'ファイルの作成または読み込みをしている時に, それに@option{-l}オプションを与えると作成されます.
@command{dlltool}は,手動でライブラリファイルを構築しますが,それは,ア センブラ宣言を含む一時ファイルを作成し,それをアセンブルすることで,エク スポートファイルを構築します.@option{-S}コマンドラインオプションは, @command{dlltool}が使用するアセンブラへのパスを指定するため使用可能で, @option{-f}オプションは,そのアセンブラに特別なフラグを渡すために使用可 能です.@option{-n}は,@command{dlltool}がこれらの一時的なアセンブラファ イルを終了後に削除することを防ぐために使用可能で,@option{-n}が二回指定 されている場合は,@command{dlltool}がライブラリを構築するために使用した, 一時的なオブジェクトファイルが削除されることを防ぎます.
ソースファイル`dll.c'からDLLを作成し,そのDLLを使用しているプログラ ムも(`program.o'という名前のオブジェクトファイルから)作成している例 は以下のようになります.
gcc -c dll.c dlltool -e exports.o -l dll.lib dll.o gcc dll.o exports.o -o dll.dll gcc program.o dll.lib -o program
コマンドラインオプションには以下の意味があります.
.idata4セクションを削除することを指定します.これは,あるオ
ペレーティングシステムとの互換性のためです.
.idata5セクションを削除することを指定します.これは,あるオ
ペレーティングシステムとの互換性のためです.
Go to the first, previous, next, last section, table of contents.