ひょっとしたら、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 件のコメント:
コメントを投稿