[ < ] | [ > ] | [ << ] | [ 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 filename
dlltool
で生成されるエクスポートファイルの,再配置のセクショ ンが追加されます.
-e filename
--output-exp filename
dlltool
で作成される,エクスポートファイルの名前を指定します.
-z filename
--output-def filename
dlltool
で作成される,`.def'ファイルの名前を指定します.
-l filename
--output-lib filename
dlltool
で作成される,ライブラリファイルの名前を指定します.
--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 machine
dlltool
には,構築のされ方に依存するデフォルト形式がありますが, このオプションで,それに優先させることが可能です.これは通常,ARM プロ セッサに対するDLLを作成するときのみ役に立ち,DLLの内容は,実際にThumb命 令を使用して符号化されます.
-a
--add-indirect
dlltool
がエクスポートファイルを作成しているとき,エクスポート 関数がインポートライブラリを使用しないで参照できるように,セクションを 加えることを指定します.たとえ,それが地獄を意味しようとも!
-U
--add-underscore
dlltool
エクスポートファイルを作成しているとき,エクスポート関 数の名前にアンダースコアを前置することを指定します.
-k
--kill-at
dlltool
エクスポートファイルを作成しているとき,文字列 `@ -A
--add-stdcall-alias
dlltool
がエクスポートファイルを作成しているとき,シンボルに `@ -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
のバージョンナンバーを表示し終了します.
[ < ] | [ > ] | [ << ] | [ 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
のいずれかになります.リンカはこれを 見て,それに作用します.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |