MediaInfoのコンパイルエラー

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するとすんなり通りました。

 

エラー文はよく読んでみるものですね。