Go to the first, previous, next, last section, table of contents.


DLLを構築し使用するのに必要なファイルの作成

ダイナミックリンクライブラリ(DLL)を構築し使用するのに必要なファイルを作 成するために,@command{dlltool}は使用されます.

に立つので,常にバイナリユーティリティの一部として構築されるわけではあり ません.

dlltool [@option{-d}|@option{--input-def} def-file-name]
        [@option{-b}|@option{--base-file} base-file-name]
        [@option{-e}|@option{--output-exp} exports-file-name]
        [@option{-z}|@option{--output-def} def-file-name]
        [@option{-l}|@option{--output-lib} library-file-name]        
        [@option{--export-all-symbols}] [@option{--no-export-all-symbols}]
        [@option{--exclude-symbols} list]
        [@option{--no-default-excludes}]
        [@option{-S}|@option{--as} path-to-assembler] [@option{-f}|@option{--as-flags} options]
        [@option{-D}|@option{--dllname} name] [@option{-m}|@option{--machine} machine]
        [@option{-a}|@option{--add-indirect}] [@option{-U}|@option{--add-underscore}] [@option{-k}|@option{--kill-at}]
        [@option{-A}|@option{--add-stdcall-alias}]
        [@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}] [@option{-i}|@option{--interwork}]
        [@option{-n}|@option{--nodelete}] [@option{-v}|@option{--verbose}] 
        [@option{-h}|@option{--help}] [@option{-V}|@option{--version}]
        [object-file ...]

@command{dlltool}は,その入力を読み込み,それは,コマンドラインで指定さ れたオブジェクトファイルと,@option{-d}と@option{-b}オプションから成り立 ちます.そして,これらの入力を処理し,@option{-e}オプションが指定されて いる場合は,エクスポートファイルを作成します.@option{-l}オプションが指 定されている場合は,ライブラリファイルを作成し,@option{-z}オプションが 指定されている場合は,defファイルを作成します.@option{-e},@option{-l}, そして@option{-z}オプションのいずれか,またはすべてを,@command{dlltool} の呼び出しに配置することが可能です.

DLLを作成しているとき,DLLのソースファイルとともに,それは三つの他のファ イルが必要です.@command{dlltool}は,これらのファイルの作成を手助けする ことが可能です.

最初のファイルは,DLLからエクスポートされる関数や,DLLがインポートする関 数等を指定する,`.def'ファイルです.これはテキストファイルで,手動 で作成したり,作成するために@command{dlltool}を@option{-z}オプションを用 いて使用したりすることが可能です.この場合,@command{dlltool}は,エクス ポートされるように特別に印の付けられたこれらの関数を探しながら,コマンド ラインで指定されたオブジェクトファイルを走査し,作成する`.def'ファ イルにそれらのエントリーを書き出します.

DLLからエクスポートされるように関数に印を付けるため,オブジェクトファイ ルの`.drectve'セクションに,@option{-export:<name_of_function>}エン トリーが必要です.これは,Cでasm()演算子を使用することで可能となります.

  asm (".section .drectve");  
  asm (".ascii \"-export:my_func\"");

  int my_func (void) { ... }

DLLの作成に必要とされる2番目のファイルは,エクスポートファイルです.この ファイルは,DLL本体を作成し,DLLと外部世界の間のインターフェースを取り扱 うオブジェクトファイルとリンクされます.これはバイナリファイルで, @command{dlltool}が`.def'ファイルの作成または読み込みをしているとき に,それに@option{-e}オプションを与えると作成されます.

DLLの作成に必要とされる三番目のファイルは,DLL内の関数にアクセスするため にプログラムとリンクするライブラリファイルです.このファイルは, @command{dlltool}が`.def'ファイルの作成または読み込みをしている時に, それに@option{-l}オプションを与えると作成されます.

@command{dlltool}は,手動でライブラリファイルを構築しますが,それは,ア センブラ宣言を含む一時ファイルを作成し,それをアセンブルすることで,エク スポートファイルを構築します.@option{-S}コマンドラインオプションは, @command{dlltool}が使用するアセンブラへのパスを指定するため使用可能で, @option{-f}オプションは,そのアセンブラに特別なフラグを渡すために使用可 能です.@option{-n}は,@command{dlltool}がこれらの一時的なアセンブラファ イルを終了後に削除することを防ぐために使用可能で,@option{-n}が二回指定 されている場合は,@command{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

コマンドラインオプションには以下の意味があります.

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


Go to the first, previous, next, last section, table of contents.