2011年11月5日土曜日

cygwin 上で cygwin.dll を使わないバイナリを作成する

Cygwin の gcc でコンパイルすると、作成したバイナリが cygwin.dll に依存するため Cygwin のターミナル上でしか起動できない。
cygwin.dll にパスを通せばいいのだが、それでは別の PC にバイナリだけ移動して使用、とかできない。

というわけで、 cygwin.dll に依存しないようにするには cygwin 付属の gcc にある
-mno-cygwin オプションを使う。
% gcc -mno-cygwin test01.c

なお、作成したバイナリがどの dll を使っているかを確認するには objdump を使う。
% objdump -p a.exe | grep -i '\.dll'
DLL 名: msvcrt.dll
DLL 名: KERNEL32.dll

※最新の cygwin でインストールされる gcc5 には -mno-cygwin オプションがないので
上記方法は使えなくなった。 cygwin.dll 非依存にするには Visual C++ を入れるとか、 Mingw を使うとかの方法を使う。

0 件のコメント:

コメントを投稿

EXCEL での正規表現置換

エクセルで、"No" の後の数字を一括で A1 セルで指定した内容に置換したくて REGEXREPLACE(B10,"(No)[0-9]+","$1"&A1) と書いたらエラーになった。なんで?  "...