C/C++言語でのプログラミングについてのHOWTO/FAQ集。 対象とする開発環境はGNU GCC(Linux, Cygwin, MinGW)、Borland C、Microsoft Visual Studio 6.0/2005/2008 など。 **目次 #contents(fromhere=true) **VC++用のDLLをCygwinで使う 前提: シンボルが除去(strip)されていないDLLもしくはそのためのインポートライブラリがあること。 VC++用のインポートライブラリをxxxx.libとすると、次の手順により、Cygwin用のインポートライブラリを作成できる。 echo EXPORTS > xxxx.def nm xxxx.lib | sed -n -e"s/.* T _//p" >> xxxx.def dlltool --def xxxx.def --dllname xxxx.dll --output-lib foo.a **コンパイルができない[GCC][Cygwin][Linux] ***エラーメッセージ中に"undefined reference to `xxxx'"とある場合 /cygdrive/c/DOCUME~1/Admin/LOCALS~1/Temp/cc668dxb.o:test.c:(.text+0x92): undefined reference to `_xxxx' collect2: ld returned 1 exit status これを解決するには、関数xxxxが定義されているファイル、またはライブラリをGCCに対して指定する。 ライブラリ名が不明の場合、次のコマンド行により検索する(シェルがBash、かつ関数名がxxxxとする)。 for f in /usr/lib/*.a; do nm $f|grep "T .*xxxx" && echo Found in $f; done 典型的な結果は次のようになる。 00000310 T _xxxx Found in /usr/lib/libyyyy.a ここで"Found in "の右側が、関数xxxxを定義しているライブラリへのパスである。見つかったライブラリ名をlibyyyy.aとすると、GCCのコマンド行に指定すべきオプションは-lyyyyである: gcc -o test test.c -lyyyy