Programming Field - プログラミング Tips

MinGW: リンク時のライブラリ順序

MinGW で、gccld を使用してのリンク時に、必要であればライブラリを指定(-l オプション)しますが、指定する順序を間違えるとエラーになってしまいます。例えば、Windows アプリケーションでソケットを利用したいと思って、以下のようにライブラリを指定すると、高い確率でエラーになります。

gcc -o testapp.o -c testapp.c
gcc -o testapp -mwindows -lwsock32 testapp.o
strip testapp.exe

これを回避するには、ライブラリ指定はすべてのオブジェクトファイルの後ろに置きます。これは、ライブラリ内で参照している外部の内容(シンボル)は、さらに後ろに指定されているライブラリから検索される(-lgcc -lkernel32 の順だと gcc ライブラリ(libgcc.a)が参照しているいくつかの内容を kernel32 (libkernel32.a)から探す)ためです。