GNUが提供しているCソースからWin32 dllにするためのツール

使い方とか

書式: DLLWRAP.EXE <options> <object-files>
  共通オプション:
   --quiet, -q            黙って動作する
   --verbose, -v          出力するメッセージ量が増える
   --version              dllwrapのバージョン情報を出力
   --implib <outname>     --output-libの類義語
  DLLWRAP.EXEが処理するオプション:
   --driver-name <driver> "gcc"がデフォルト
   --driver-flags <flags> ldフラグのデフォルト値を書き換え
   --dlltool-name <dlltool> "dlltool"がデフォルト
   --entry <entry>        一つおきにDLLエントリポイントを指定する
   --image-base <base>    イメージベースアドレスを指定
   --target <machine>     i386-cygwin32 か i386-mingw32
   --dry-run              実行するのに必要なものを表示
   --mno-cygwin           MingwのDLLを作成
  DLLTOOLに渡されるオプション:
   --machine <machine>    DLLTOOLを参照
   --output-exp <outname> 出力ファイルを生成
   --output-lib <outname> 入力ライブラリを生成
   --add-indirect         DLLのindirectをexportファイルに加える
   --dllname <name>       入力DLL名を出力ライブラリの中に入れる
   --def <deffile>        入力用.defファイルの名前
   --output-def <deffile> 出力用.defファイルの名前
   --export-all-symbols     .defに全てのシンボルをエクスポートする
   --no-export-all-symbols  .drectveシンボルだけをエクスポートする
   --exclude-symbols <list> .defから<list>を除外する
   --no-default-excludes    デフォルトの除外シンボルを除外しない
   --base-file <basefile> basefileに生成されたリンカを読む
   --no-idata4           idata$4の項目を生成しない
   --no-idata5           idata$5の項目を生成しない
   -U                    .libを強調させる
   -k                     エクスポート名から@<n>を取り除く
   --add-stdcall-alias    @<n>のない名前を加える
   --as <name>            アセンブラで<name>を処理する
   --nodelete             一時ファイルを削除しない

  残りはDLLTOOL,DLLWRAPでは無視して,
  そのまま言語処理プログラム(言語ドライバ)に渡されます.

適当なのですが、こうやって動かすらしい

__declspec(dllimport)つきのプロトタイプ宣言と__declspec(dllexport)をつけた関数をつくる

greeting.c

   1 #include <stdio.h>
   2 
   3 __declspec (dllimport) char* hello (void);
   4 
   5 __declspec (dllexport) char* hello (void){
   6   return "Hey from cygwin built dll!";
   7 }

コンパイル

shell command

> dllwrap --add-stdcall-alias --output-def greeting.def --driver-name gcc -mno-cygwin  --target=i386-mingw32 --export-all -s -o greeting.dll greeting.o (1行で)

Cygwin/dllwrap (last edited 2005-09-15 04:41:41 by KeisukeUrago)