2011年12月25日

libcdioで「undefined reference to `strndup'」

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

という感じでパッチを適用してください。
posted by あべちん at 19:11 | Comment(2) | TrackBack(0) | FFmpeg追加ライブラリ
この記事へのコメント
お疲れ様です。

これからもうMinGWでmakeできないのかなぁと諦めてました。
やっぱgit cloneはDeveloper向けなんだな〜と思う今日この頃。

strnlen.cとstrndup.cをpatchにする発想はすごい。
使用させて頂きます。
ありがとう御座いました。
Posted by X5-452 at 2011年12月28日 23:57
X5-452さん

実はこれも、どこかで似たようなことをして解決している方がいたので、それをヒントにしました。
元ネタがどこだったか忘れてしまいました…。

どうぞご自由にお使いください。
Posted by あべちん at 2011年12月29日 14:55
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/52376655
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック