Sunday, February 27, 2011

[FFmpeg] さらばlibavcore

しばらくビルドをサボっている間にFFmpegのlibavcoreがlibavutilにmergeされたらしい。おいおい…。さすがにちょっとあきれた…。

2010年の7月21日に追加され、その影響でlavfサポートのx264のビルドがうまくいかなくなることで多くの人の脳裏に焼きついたlibavcore。タブ補完でlibavcodecとバッティングしてイライラさせてくれたlibavcore。わずか半年余りでその短い生涯を終えることになったけど、君の事は一生忘れない。

…。

と冗談はさておき、このことで注意しておいた方がよさそうなことを一応メモしておきます。ビルダー向けの記事です。「んなこと知ってるよ(笑)」という方は無視してください。



FFmpegをビルドしてインストールするときは、git repositoryからソースコードを取得(git clone)して、環境に合わせてMakefileを作成(configure)して、ビルド(make)して、インストール(make install)します。更新するときは、ソースコードを更新(git pull)して再度configureを走らせてからmakeしてmake installします(以上はあくまで「最低限」の手順)。

それで今回のlibavcoreの消失で何が問題になるかというと、アンインストールを気をつけないと「ゴミ」が残ること。そのゴミをきちんと削除しないと、例えばlavfをサポートしたx264のビルドで支障をきたす場合が出てきます。

ソースコードからビルドしてインストールをしたときは、make uninstallを走らせることでアンインストールができるようになっているものが多いです。FFmpegもそう。だから「綺麗に」更新したい場合は、まずgit pullをする前に、make uninstallをするべきです(その後でmake distcleanしてからconfigureを走らせてmake && make install)。でもそれが面倒な人はmake uninstallをしないままgit pullを行い、configure && make && make installしてしまいます。それでもファイルは新しいもので上書きされるから大抵の場合は問題が起きません。

でも今回そういうことをしてしまうと、libavcoreがそのままの状態になってしまいます。つまり、libavutilは最新になり、同時にlibavcoreも存在してしまいます。そうするとどうなるか。例えばx264のビルドでこういうエラーを吐いてビルドに失敗するケースがあります。
ld: duplicate symbol _av_parse_video_size in /usr/local/lib/libavutil.a(parseutils.o) and /usr/local/lib/libavcore.a(parseutils.o)
collect2: ld returned 1 exit status
make: *** [x264] Error 1

対処法はいくつかあります。

  1. x264のソースコードを弄る→configureを開いてlibavcoreを削除

  2. libavcore関連のファイルを手動で削除→結構面倒。消し忘れ怖い。

  3. やっぱりmake uninstallで対処する→これが一番マシ


3の対処法ではffmpegのリビジョンに気をつけないといけません。既にgit pullでソースコードを更新しているので、今更make uninstallしてもlibavcore関連は削除されません。make uninstallでlibavcore関連を削除させるには、libavcoreが消える「前」のリビジョンまで戻り(git reset)、その後でconfigure && make uninstallをしないと駄目です。

…。

というかもっと早く記事書くべきでしたよねえ…。libavcoreが消えたのってもう3週間近く前の話じゃないですか…。トホホ…orz

それにしても、登場のときだけでなく去り際でも落とし穴を用意してくれるlibavcoreタン、なかなか素敵です。

No comments:

Post a Comment