13 dlltool
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
コマンドラインオプションには以下の意味があります.
- -d filename
- --input-def filename
-
読み込み,処理する.defファイルの名前を指定します.
- -b filename
- --base-file filename
-
読み込み,処理するベースファイルの名前を指定します.このファイルの内容
に,dlltoolで生成されるエクスポートファイルの,再配置のセクショ
ンが追加されます.
- -e filename
- --output-exp filename
-
dlltoolで作成される,エクスポートファイルの名前を指定します.
- -z filename
- --output-def filename
-
dlltoolで作成される,.defファイルの名前を指定します.
- -l filename
- --output-lib filename
-
dlltoolで作成される,ライブラリファイルの名前を指定します.
- --export-all-symbols
-
入力ファイル内のエクスポートされるシンボルとして見つかったものは,すべ
て大域的にweakとして定義されているシンボルとして扱います.これらは,デ
フォルトでエクスポートされないシンボルの小さなリストです.
--no-default-excludesオプションを参照してください.
--exclude-symbolsオプションを使用して,エクスポートされないシ
ンボルのリストを追加してもかまいません.
- --no-export-all-symbols
-
入力の.defファイルや入力オブジェクトファイルの`.drectve'セ
クションで,明示的にリストアップされているシンボルのみエクスポートしま
す.`.drectve'は,ソースコード内の`dllexport'属性で作成されま
す.
- --exclude-symbols list
-
list内のシンボルをエクスポートしません.これは,カンマまたはコロ
ン文字で分けられた,シンボル名のリストです.シンボル名に,アンダースコ
アの前置を含めることはできません.これは,
--export-all-symbolsが使用されているときのみ意味があります.
- --no-default-excludes
-
--export-all-symbolsが使用されているとき,それはデフォルトで,
ある特別なシンボルをエクスポートすることを避けます.現在のエクスポート
を避けるリストは,`DllMain@12', `DllEntryPoint@0',
`impure_ptr'です.これらの特別なシンボルを進んでエクスポートするた
めに,--no-default-excludesオプションを使用してもかまいません.
これは,--export-all-symbolsが使用されているときのみ意味があり
ます.
- -S path
- --as path
-
エクスポートファイルを作成するために使用するアセンブラの,ファイル名を
含む,パスを指定します.
- -f options
- --as-flags options
-
エクスポートファイルを構築しているときアセンブラに渡す,あらゆる特別な
コマンドラインオプションを指定します.このオプションは,-Sが指
定されていないかのように動作します.このオプションは一つの引数のみ渡し,
コマンドラインに一回以上出現する場合,最後に出現したものを,前に出現し
たものに優先させます.そのため,複数のオプションをアセンブラに渡す必要
がある場合は,二重引用符で囲む必要があります.
- -D name
- --dll-name name
-
-eオプションが使用されてるとき,DLLの名前として.defファ
イルに保存する名前を指定します.このオプションがない場合,-e
オプションで与えられるファイル名は,DLLの名前として使用されます.
- -m machine
- -machine machine
-
ライブラリファイルが構築されるマシンの形式を指定します.
dlltoolには,構築のされ方に依存するデフォルト形式がありますが,
このオプションで,それに優先させることが可能です.これは通常,ARM プロ
セッサに対するDLLを作成するときのみ役に立ち,DLLの内容は,実際にThumb命
令を使用して符号化されます.
- -a
- --add-indirect
-
dlltoolがエクスポートファイルを作成しているとき,エクスポート
関数がインポートライブラリを使用しないで参照できるように,セクションを
加えることを指定します.たとえ,それが地獄を意味しようとも!
- -U
- --add-underscore
-
dlltoolエクスポートファイルを作成しているとき,エクスポート関
数の名前にアンダースコアを前置することを指定します.
- -k
- --kill-at
-
dlltoolエクスポートファイルを作成しているとき,文字列
`@ <number>'を追加しないことを指定します.これらの数字は,序数と
呼ばれ,DLL では関数にアクセスする一つの方法を表示し,それ以外では名前
で表示します.
- -A
- --add-stdcall-alias
-
dlltoolがエクスポートファイルを作成しているとき,シンボルに
`@ <number>'を追加したものを,`@ <number>'なしでstdcallシン
ボルの別名を加えることを指定します.
- -p
- --ext-prefix-alias prefix
-
dlltoolで,すべてのDLLインポートに対して指定した接頭辞で外部
へのエイリアスを作成します.エイリアスは外部とインポートの両方のシンボ
ルを前置するアンダースコア無しで作成します.
- -x
- --no-idata4
-
dlltoolエクスポートファイルとライブラリファイルを作成している
とき,
.idata4
セクションを削除することを指定します.これは,ある
オペレーティングシステムとの互換性のためです.
- -c
- --no-idata5
-
dlltoolエクスポートファイルとライブラリファイルを作成している
とき,
.idata5
セクションを削除することを指定します.これは,ある
オペレーティングシステムとの互換性のためです.
- -i
- --interwork
-
dlltoolが,生成しているライブラリファイルとエクスポートファイ
ル内のオブジェクトに,ARMとThumb間での相互動作をサポートするように印を
付けることを指定します.
- -n
- --nodelete
-
dlltoolが,エクスポートファイルを作成するために使用した一時的
なアセンブラファイルを保存するようにします.このオプションが繰り返され
る場合,dlltoolは,ライブラリを作成するために使用する一時的な
オブジェクトファイルも保存します.
- -t prefix
- --temp-prefix prefix
-
dlltoolが,一時的なアセンブラとオブジェクトファイルの名前を構
成するとき,prefixを使用するようにします.デフォルトで,一時的な
ファイルの接頭辞はpidから生成されます.
- -v
- --verbose
-
dlltoolが,行っていることを記述します.
- -h
- --help
-
コマンドラインオプションのリストを表示し終了します.
- -V
- --version
-
dlltoolのバージョンナンバーを表示し終了します.