わたなべです. "Nobuyoshi.Nakada" <nobu.nakada / nifty.ne.jp> writes: : -static をつけないと lib*.dll.a を先に探してくれるわけですか。dllwrap :だとダメなようですが、やり方が悪いのかな。 Cygwin 1.1.0 からは gcc -shared が使えるから dllwrap は要ら ないと思ったら, どうも変数の symbol がうまく export できなく て役立たずの DLL ができあがって悩みました. #でも, .def を使えばいいのか. 試してみよう. 今は Linux 上なもんで cross な環境ですが, -static でちゃんと 目的のライブラリがリンクされてます. ruby-zlib-0.3.1 で試しました. % i686-pc-cygwin-dllwrap --target=cygwin --as=i686-pc-cygwin-as \ --dlltool-name=i686-pc-cygwin-dlltool \ --driver-name=i686-pc-cygwin-gcc --export-all -s --def=zlib.def \ -L/install/i386-cygwin/usr/local/lib -L/usr/local/cygwin/lib \ -o zlib.so zlib.o -L. -lruby -lz % ls -l zlib.so -rwxr-xr-x 1 watanabe ruby 26112 Aug 25 00:33 zlib.so % i686-pc-cygwin-objdump -p zlib.so | grep 'DLL Name' DLL Name: ruby.cygwin.dll DLL Name: cygwin1.dll DLL Name: KERNEL32.dll DLL Name: libz.dll % i686-pc-cygwin-dllwrap --target=cygwin --as=i686-pc-cygwin-as \ --dlltool-name=i686-pc-cygwin-dlltool \ --driver-name=i686-pc-cygwin-gcc --export-all -s --def=zlib.def \ -L/install/i386-cygwin/usr/local/lib -L/usr/local/cygwin/lib \ -o zlib.so zlib.o -L. -lruby -lz -static % ls -l zlib.so -rwxr-xr-x 1 watanabe ruby 61952 Aug 25 00:34 zlib.so % i686-pc-cygwin-objdump -p zlib.so | grep 'DLL Name' DLL Name: ruby.cygwin.dll DLL Name: cygwin1.dll DLL Name: KERNEL32.dll というわけで /usr/lib/lib*.dll.a の存在にも注意しましょう. あ, それとこの結果を見るとちょっと驚くかも. % i686-pc-cygwin-gcc -Wl,--verbose foo.c -LHOGE -lz |& grep HOGE attempt to open HOGE/libz.dll.a failed attempt to open HOGE/z.dll.a failed attempt to open HOGE/libz.a failed attempt to open HOGE/libz.dll failed attempt to open HOGE/z.dll failed attempt to open HOGE/libz.a failed attempt to open HOGE/libz.dll.a failed attempt to open HOGE/z.dll.a failed attempt to open HOGE/libz.a failed attempt to open HOGE/libz.dll failed attempt to open HOGE/z.dll failed attempt to open HOGE/z.lib failed z.lib も探すし, DLL も直接リンクできるようになってます. これも変数の symbol がいまいちな感じだけど. -- わたなべひろふみ