2010年4月22日木曜日

(pkgsrc) libiconvがbmakeできない ~ iconv_no_i18n.c:(.text+0x3f7): undefined reference to `_libiconv_version'

ひさびさにpkgsrcを使ってみたら、libiconvのビルドでエラー。



libtool: link: gcc -Wl,-R/usr/pkg/gcc34/lib/gcc/x86_64-unknown-linux-gnu/3.4.6 -Wl,-R/usr/pkg/gcc34/lib -Wl,-R/usr/pkg/gcc34/lib/gcc/x86_64-unknown-linux-gnu/3.4.6/ -Wl,-R/usr/lib64 -Wl,-R/usr/pkg/lib -Wno-error -Wno-format -fno-builtin -I/usr/tmp/pkgsrc/converters/libiconv/work/.buildlink/gcc34/include -I/usr/tmp/pkgsrc/converters/libiconv/work/.buildlink/gcc34/lib/gcc/x86_64-unknown-linux-gnu/3.4.6/include iconv_no_i18n.o -o .libs/iconv_no_i18n  -L/usr/tmp/pkgsrc/converters/libiconv/work/.buildlink/gcc34/lib/gcc/x86_64-unknown-linux-gnu/3.4.6 -L/usr/tmp/pkgsrc/converters/libiconv/work/.buildlink/gcc34/lib -L/usr/tmp/pkgsrc/converters/libiconv/work/.buildlink/gcc34/lib/gcc/x86_64-unknown-linux-gnu/3.4.6/ ../srclib/libicrt.a /usr/tmp/pkgsrc/converters/libiconv/work/libiconv-1.12/lib/.libs/libiconv.so -L/usr/tmp/pkgsrc/converters/libiconv/work/.buildlink/lib -Wl,-rpath -Wl,/usr/pkg/lib
iconv_no_i18n.o: In function `print_version':
iconv_no_i18n.c:(.text+0x3f7): undefined reference to `_libiconv_version'
iconv_no_i18n.c:(.text+0x3fd): undefined reference to `_libiconv_version'
iconv_no_i18n.o: In function `subst_mb_to_uc_fallback':
iconv_no_i18n.c:(.text+0x957): undefined reference to `libiconv'
iconv_no_i18n.c:(.text+0x976): undefined reference to `libiconv'
iconv_no_i18n.c:(.text+0x99d): undefined reference to `libiconv'
iconv_no_i18n.o: In function `subst_uc_to_mb_fallback':
iconv_no_i18n.c:(.text+0xa9f): undefined reference to `libiconv'
iconv_no_i18n.c:(.text+0xabe): undefined reference to `libiconv'
iconv_no_i18n.o:iconv_no_i18n.c:(.text+0xae5): more undefined references to `libiconv' follow

iconv_no_i18n.o: In function `convert':
iconv_no_i18n.c:(.text+0x125d): undefined reference to `libiconvctl'
iconv_no_i18n.c:(.text+0x1437): undefined reference to `libiconv'
iconv_no_i18n.c:(.text+0x14ff): undefined reference to `libiconvctl'
iconv_no_i18n.o: In function `main':
iconv_no_i18n.c:(.text+0x1f3d): undefined reference to `libiconvlist'
iconv_no_i18n.c:(.text+0x1f77): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x1f94): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x1fc7): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x2039): undefined reference to `iconv_canonicalize'
iconv_no_i18n.c:(.text+0x2059): undefined reference to `iconv_canonicalize'
iconv_no_i18n.c:(.text+0x20ea): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x211b): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x214b): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x2185): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x21bf): undefined reference to `libiconv_open'
iconv_no_i18n.c:(.text+0x22af): undefined reference to `libiconvctl'
iconv_no_i18n.c:(.text+0x22d9): undefined reference to `libiconvctl'
iconv_no_i18n.c:(.text+0x23dd): undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
*** Error code 1

Stop.
bmake: stopped in /usr/tmp/pkgsrc/converters/libiconv/work/libiconv-1.12/src



原因は、リンクしなくてはいけないライブラリのlibiconv.so が、pkgsrcのwrapperコマンドによって、コマンド引数から抜かれてしまうことのようで、そりゃーエラーになるだろう、って感じだった。



ホストによっては、エラーにならず、ちゃんとビルドできるものもあるので、謎だった。



2日くらい悩んで、原因らしきものがようやく判明。



mk.confでは

WRKOBJDIR=/usr/tmp/pkgsrc

と指定していた。
実は、/usr/tmpは、/var/tmpへのシンボリックリンクになっていた。



どうも、シンボリックリンクがあると、wrapperが、誤動作(?)するらしい。

WRKOBJDIR=/var/tmp/pkgsrc

に変更したところ、これでうまくいった!



今回の一件で、bmake WRAPPER_DEBUG=yes という技を覚えた。
エラーが起きたとき、wrapperが書き換えた後のコマンドを表示してくれるようだ。



0 件のコメント:

コメントを投稿