gentooをアップデートしていると、時々思わぬエラーで躓きます。
今回はMediaInfoがemergeに失敗しました。
/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/../../../../lib64/libmediainfo.so: undefined reference to `ZenLib::Ztring::FindAndReplace(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, unsigned long, ZenLib::ztring_t)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:414: mediainfo] エラー 1
* ERROR: media-video/mediainfo-0.7.96::gentoo failed (compile phase):
* emake failed
*
* If you need support, post the output of `emerge --info '=media-video/mediainfo-0.7.96::gentoo'`,
* the complete build log and the output of `emerge -pqv '=media-video/mediainfo-0.7.96::gentoo'`.
* The complete build log is located at '/var/tmp/portage/media-video/mediainfo-0.7.96/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/media-video/mediainfo-0.7.96/temp/environment'.
* Working directory: '/var/tmp/portage/media-video/mediainfo-0.7.96/work/MediaInfo/Project/GNU/CLI'
* S: '/var/tmp/portage/media-video/mediainfo-0.7.96/work/MediaInfo'
この、"collect2: error: ld returned 1 exit status"というのは、ほとんどの場合、そんな関数ねえよ!っていうエラーだそうで、どんな関数かは、その前の行を見ると、"undefined reference to `ZenLib::Ztring(以下略)"と書いてあるので、Zenlibという関数がないよ、ということだそうです。
で、自分でコードを書いたのなら、「あー、関数のスペルミスか」となりますが、emergeなのでそんなはずはありません。
google先生に聞いてみると、gccのバージョン違いで関数が見つからない場合があるようです。
gentoo ~ # emerge -p libzen
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] media-libs/libzen-0.4.35
やはりありました!
これをemergeし直してから、MediaInfoをemerge -uするとすんなり通りました。
エラー文はよく読んでみるものですね。