2012年5月18日金曜日

mingw64 と mingw32 だと設定が違うのか?

昨日の続きで SDPA-M の 64bit Windows Matlab 用のものをコンパイルしているが、以前の 32bit 用と同じように 64bit でコンパイルしたら、libgcc の DLL が必要だと言われてしまった。
ひょっとしたら、mingw32 と mingw64 で異なるのかもしれない。
(他にも gcc のバージョンアップに伴う変化の可能性もあり。)

いずれにしても、mingw64 で DLL なしで実行できる exe を作るためには、 gcc, g++ などでのリンクの時点で -static をつければよい。
これで、
$ x86_64-w64-mingw32-objdump -p sdpa.exe | grep DLL
などとすると、libgcc などの DLL がリストアップされなくなる。
ちなみに、このコマンドは exe や dll で必要な DLL をリストアップするためのものであり、KERNEL などWindows 標準の DLL なども表示される。

また、Matlab の mex ファイル拡張子である mexw32, mexw64 がついているファイルは、実質的には DLL なので、 gcc に -shared -static で DLL として作成して拡張子を変更すれば Debian のクロスコンパイラでも作れるのである(だから SDPA-M がコンパイルできている)。
mexw32, mexw64 と異なった拡張子になっているのは、たとえば、sample.dll だと 64bit,32bit の両方を同じファイルに格納できないが sample.mexw32, sample.mexw64 だと両方を同時に格納できるためと考えられる。
このあたりは、linux 上の mex ファイルの拡張子が so でないのも同じ理由と推測できる。

今日コンパイルした SDPA-M は別途動作確認をしてもらう予定である。

今日の作業内容:SDPA-M 3h + CHOLMOD 2h
今日のランチ:四川 鶏ネギ炒め
明日の予測作業時間:4h



0 件のコメント:

コメントを投稿