| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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:
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-b filename--base-file filenamedlltoolで生成されるエクスポートファイルの,再配置のセクショ ンが追加されます.
-e filename--output-exp filenamedlltoolで作成される,エクスポートファイルの名前を指定します.
-z filename--output-def filenamedlltoolで作成される,`.def'ファイルの名前を指定します.
-l filename--output-lib filenamedlltoolで作成される,ライブラリファイルの名前を指定します.
--export-all-symbols--no-export-all-symbols--exclude-symbols list--no-default-excludes-S path--as path-f options--as-flags options-D name--dll-name name-m machine-machine machinedlltoolには,構築のされ方に依存するデフォルト形式がありますが, このオプションで,それに優先させることが可能です.これは通常,ARM プロ セッサに対するDLLを作成するときのみ役に立ち,DLLの内容は,実際にThumb命 令を使用して符号化されます.
-a--add-indirectdlltoolがエクスポートファイルを作成しているとき,エクスポート 関数がインポートライブラリを使用しないで参照できるように,セクションを 加えることを指定します.たとえ,それが地獄を意味しようとも!
-U--add-underscoredlltoolエクスポートファイルを作成しているとき,エクスポート関 数の名前にアンダースコアを前置することを指定します.
-k--kill-atdlltoolエクスポートファイルを作成しているとき,文字列 `@ -A--add-stdcall-aliasdlltoolがエクスポートファイルを作成しているとき,シンボルに `@ -p--ext-prefix-alias prefixdlltoolで,すべてのDLLインポートに対して指定した接頭辞で外部 へのエイリアスを作成します.エイリアスは外部とインポートの両方のシンボ ルを前置するアンダースコア無しで作成します.
-x--no-idata4dlltoolエクスポートファイルとライブラリファイルを作成している とき,.idata4セクションを削除することを指定します.これは,ある オペレーティングシステムとの互換性のためです.
-c--no-idata5dlltoolエクスポートファイルとライブラリファイルを作成している とき,.idata5セクションを削除することを指定します.これは,ある オペレーティングシステムとの互換性のためです.
-i--interworkdlltoolが,生成しているライブラリファイルとエクスポートファイ ル内のオブジェクトに,ARMとThumb間での相互動作をサポートするように印を 付けることを指定します.
-n--nodeletedlltoolが,エクスポートファイルを作成するために使用した一時的 なアセンブラファイルを保存するようにします.このオプションが繰り返され る場合,dlltoolは,ライブラリを作成するために使用する一時的な オブジェクトファイルも保存します.
-t prefix--temp-prefix prefixdlltoolが,一時的なアセンブラとオブジェクトファイルの名前を構 成するとき,prefixを使用するようにします.デフォルトで,一時的な ファイルの接頭辞はpidから生成されます.
-v--verbosedlltoolが,行っていることを記述します.
-h--help-V--versiondlltoolのバージョンナンバーを表示し終了します.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dlltool `.def'ファイルのフォーマットdlltool`.def'ファイルのフォーマット"へのコメント(無し)
`.def'ファイルには,任意の数の以下のコマンドが含まれています.
NAME name [ , base ]
.exeという名前になります.
LIBRARY name [ , base ]
.dllという名前になります.
EXPORTS ( ( ( name1 [ = name2 ] ) | ( name1 = module-name . external-name ) )
[ integer ] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *
IMPORTS ( ( internal-name = module-name . integer ) | [ internal-name = ] module-name . external-name ) ) *
DESCRIPTION string
.rdataセクションに 書き込みます.
STACKSIZE number-reserve [, number-commit ]
HEAPSIZE number-reserve [, number-commit ]
--stackや--heapのnumber-reserveと number-commitを,出力の.drectveセクションに生成します.リ ンカはこれを見て,それに作用します.
CODE attr +
DATA attr +
SECTIONS ( section-name attr + ) *
--attr section-name attrを出力の.drectveセク ションに生成し,そこでのattrはREAD,WRITE, EXECUTE,またはSHAREDのいずれかになります.リンカはこれを 見て,それに作用します.
| [ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |