2012/01/17 追記
2012/01/17の更新(gitハッシュ値8238905)で、strndup関数の問題は修正されました。
2011/12/11に更新されたlibcdioのソースコード(gitハッシュ値1841da6)をコンパイルすると、こんなエラーが出ます。
../../lib/driver/.libs/libcdio.a(abs_path.o): In function `cdio_dirname':
c:\TEMP\src\libcdio.orig\lib\driver/abs_path.c:88: undefined reference to `strndup'
MinGWにはstrndup関数がありません。
ということで探したところ、patchのAlpha releases版のソースの中にstrndupのソースがありました。
strndupの中で使われているstrnlenもMinGWに無いので、patchのソースから2つ使います。
まず、以下の場所からpatchのソースコードをダウンロードします。
(2011/12/25時点での最新版ですので、更新されているかもしれません。)
GNU patch - 概要
http://savannah.gnu.org/projects/patch/
より、
・Alpha releases can be downloaded from ftp://alpha.gnu.org/gnu/patch.
patch-2.6.1.136-31a7.tar.gz
libcdioのソースコードを、gitでダウンロードします。
$ git clone http://git.savannah.gnu.org/r/libcdio.git
patchのソースコードを解凍して、2つのファイルを、libcdio/lib/driver/ ディレクトリにコピーします。
$ tar xzf patch-2.6.1.136-31a7.tar.gz
$ cp patch-2.6.1.136-31a7/lib/strnlen.c libcdio/lib/driver/
$ cp patch-2.6.1.136-31a7/lib/strndup.c libcdio/lib/driver/
次に、libcdio/lib/driver/Makefile.am の
libcdio_sources = \
の所に、strnlen.c と strndup.c を追加します。
diff -urN libcdio.orig/lib/driver/Makefile.am libcdio/lib/driver/Makefile.am
--- libcdio.orig/lib/driver/Makefile.am 2011-12-25 14:59:00 +0900
+++ libcdio/lib/driver/Makefile.am 2011-12-25 14:58:41 +0900
@@ -100,6 +100,8 @@
realpath.c \
sector.c \
solaris.c \
+ strndup.c \
+ strnlen.c \
track.c \
utf8.c \
util.c
あとは、「libcdioのコンパイル&インストール」の記事に書いてある手順でインストールできます。
patchのソースを持ってくるのも面倒という方のために、以下の一括パッチファイルを置いておきます。
・strnlen.c と strndup.c の追加
・libcdio/lib/driver/Makefile.am の修正
libcdio-0.84git-strndup.diff
$ cd libcdio
$ patch -p1 < libcdio-0.84git-strndup.diff
という感じでパッチを適用してください。
2011年12月25日
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/52376655
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/52376655
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
これからもうMinGWでmakeできないのかなぁと諦めてました。
やっぱgit cloneはDeveloper向けなんだな〜と思う今日この頃。
strnlen.cとstrndup.cをpatchにする発想はすごい。
使用させて頂きます。
ありがとう御座いました。
実はこれも、どこかで似たようなことをして解決している方がいたので、それをヒントにしました。
元ネタがどこだったか忘れてしまいました…。
どうぞご自由にお使いください。