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 を使うとかの方法を使う。

コメント

人気の投稿