cannot find -lgcc

今度は cannot find -lgcc というエラー。-mno-cygwinを指定していると出る。

% gcc -shared -mwindows -o mylib2.dll mylib.c
% <= 成功
% gcc -shared -mwindows -mno-cygwin -o mylib2.dll mylib.c
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/bin/ld: cannot find -lgcc

% locate libgcc
/lib/gcc-lib/i686-pc-cygwin/3.3.3/libgcc.a
/lib/gcc/i686-pc-cygwin/3.4.4/libgcc.a
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/libgcc.a
/usr/lib/gcc/i686-pc-cygwin/3.4.4/libgcc.a

mingw32用のlibgccがない??

% gcc -print-search-dirs
インストール: /usr/lib/gcc/i686-pc-cygwin/3.4.4/
プログラム: =/usr/lib/gcc/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/:/usr/libexec/gcc/i686-pc-cygwin/3.4.4/:/usr/libexec/gcc/i686-pc-cygwin/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/
ライブラリ: =/usr/lib/gcc/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/lib/i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/lib/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../i686-pc-cygwin/3.4.4/:/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../:/lib/i686-pc-cygwin/3.4.4/:/lib/:/usr/lib/i686-pc-cygwin/3.4.4/:/usr/lib/
% gcc -mno-cygwin -print-search-dirs
インストール: /usr/lib/gcc/i686-pc-mingw32/3.4.4/
プログラム: =/usr/lib/gcc/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/:/usr/libexec/gcc/i686-pc-mingw32/3.4.4/:/usr/libexec/gcc/i686-pc-mingw32/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/bin/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/bin/
ライブラリ: =/usr/lib/gcc/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/lib/i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/lib/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../i686-pc-mingw32/3.4.4/:/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../:/lib/i686-pc-mingw32/3.4.4/:/lib/:/usr/lib/i686-pc-mingw32/3.4.4/:/usr/lib/

% ls /usr/lib/gcc/i686-pc-mingw32/3.4.4
cc1obj.exe include jc1.exe jvgenmain.exe libobjc.a

やっぱりmingw32版のいろんなライブラリが足りない気がする。たぶん、/usr/lib/gcc/i686-pc-mingw32/3.4.4/libgcc.a がないといけない。

どのパッケージに含まれるのか調べる

cygcheck --find-packageで、mingw32版のlibgcc.aがどのパッケージに含まれるのか調査。

% cygcheck --find-package /lib/gcc/i686-pc-cygwin/3.4.4/libgcc.a
gcc-core-3.4.4-3
% cygcheck --find-package /lib/gcc/i686-pc-mingw32/3.4.4/libgcc.a
%

mingw32版が含まれるパッケージがない。。。

無理やり解決してみる

cygwinインストーラからは手に入らないみたいなので、MinGWを落としてきてインストール。
http://www.mingw.org/
MinGW-5.1.4.exe を落としてきて、c:\MinGWにインストール。そうしたら、c:\MinGW\lib\gcc\mingw32\3.4.5 にlibgcc.aがあったので、コピーしてみる。(バージョン違うけど)

% cp /c/mingw/lib/gcc/mingw32/3.4.5/libgcc.a /usr/lib/gcc/i686-pc-mingw32/3.4.4
% gcc -shared -mwindows -mno-cygwin -o mylib2.dll mylib.c
%

コンパイル通った!ほんとにこんなんでいいのかな。
cygwinのsetupから/lib/gcc/i686-pc-mingw32/3.4.4/にライブラリがインストールされないとおかしいよな。