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