次: Selecting The Target System, 前: windres, 上: Top
WindowsのようなPEフォーマットイメージファイルを理解するシステムで,ダイ ナミックリンクライブラリ(DLL)を作成するために必要なファイルを作成するた めに,dlltoolは使用されます.DLLには,参照元のプログラムが参 照先を実行時に解決するためにローダが必要とする情報を含んでいる,エクス ポートテーブルが含まれます.
エクスポートテーブルは,.defファイルやを読み込んだり,DLL内の .aと.oファイルをスキャンすることで,このプログラムが生成 します..oファイルには,エクスポート情報がある特殊な `.drectve'セクションを含めることが可能です.
Note: 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]
[-p|--ext-prefix-alias prefix]
[-x|--no-idata4] [-c|--no-idata5] [-i|--interwork]
[-n|--nodelete] [-t|--temp-prefix prefix]
[-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セクションを削除することを指定します.これは,ある
オペレーティングシステムとの互換性のためです.