13 DLLを構築し使用するのに必要なファイルの作成
ダイナミックリンクライブラリ(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
コマンドラインオプションには以下の意味があります.
- -d filename
- --input-def filename
-
読み込み,処理する.defファイルの名前を指定します.
- -b filename
- --base-file filename
-
読み込み,処理するベースファイルの名前を指定します.このファイルの内容
に,dlltoolで生成されるエクスポートファイルの,再配置のセク
ションが追加されます.
- -e filename
- --output-exp filename
-
dlltoolで作成される,.defファイルの名前を指定します.
- -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シ
ンボルの別名を加えることを指定します.
- -x
- --no-idata4
-
dlltoolエクスポートファイルとライブラリファイルを作成してい
るとき,
.idata4
セクションを削除することを指定します.これは,あ
るオペレーティングシステムとの互換性のためです.
- -c
- --no-idata5
-
dlltoolエクスポートファイルとライブラリファイルを作成してい
るとき,
.idata5
セクションを削除することを指定します.これは,あ
るオペレーティングシステムとの互換性のためです.
- -i
- --interwork
-
dlltoolが,生成しているライブラリファイルとエクスポートファ
イル内のオブジェクトに,ARMとThumb間での相互動作をサポートするように印
を付けることを指定します.
- -n
- --nodelete
-
dlltoolが,エクスポートファイルを作成するために使用した一時
的なアセンブラファイルを保存するようにします.このオプションが繰り返さ
れる場合,dlltoolは,ライブラリを作成するために使用する一時
的なオブジェクトファイルも保存します.
- -v
- --verbose
-
dlltoolが,行っていることを記述します.
- -h
- --help
-
コマンドラインオプションのリストを表示し終了します.
- -V
- --version
-
dlltoolのバージョンナンバーを表示し終了します.