2012年5月11日金曜日

gccとmkvtoolnix

スーパー間が空いてしまいましたが書くネタを探しておりました。
Firefoxはもうhgを使って更新するだけなのでもういいかなと思って
公式バイナリを展開してお茶を濁しております。

さて本題の方は本来はmkvtoolnixの方だったりしますが、gcc4.5以降じゃないと
configureで弾かれるのでgccから入れる作業です。


●GCC4.7を入れてみる
基本的にはさかな前線さんの該当記事を参考にしております。ありがたやー

○GMP・MPFR・MPCのインストール
 順番はGMP→MPFR→MPCで、ライブラリ依存してるのでGMPからやりましょう
 インストール先はどこでもいいのですが、gccの処理系を独立させるために
 ホームディレクトリにselflocalを作ってインストールしています。

 ・GMP
    http://gmplib.org/
   
$ ./configure --prefix=${HOME}/selflocal
$ make && make install

・MPFR
   http://www.mpfr.org/

$ ./configure --prefix=${HOME}/selflocal --with-gmp=${HOME}/selflocal
$ make && make install


 ・MPC
http://www.multiprecision.org/

$ ./configure --prefix=${HOME}/selflocal \
 --with-gmp=${HOME}/selflocal --with-mpfr=${HOME}/selflocal
$ make && make install

○GCC4.7のインストール
 やることは変わりませんが、最適化のためにできたバイナリで再度ビルドするという
 ことを3回するようなので時間がかかります。
 そのせいかは分かりませんがライブラリパスが通ってないと
 途中でエラーになるようです。
 コマンドで環境変数を一時設定するのが面倒ならexportで通してください。
 ・GCC
 公式
 http://gcc.gnu.org/
 筑波大学WIDEプロジェクトダウンロードミラー
 http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
  
$ ./configure --prefix=${HOME}/selflocal --program-suffix=-4.7 \
   --with-gmp=${HOME}/selflocal \
   --with-mpfr=${HOME}/selflocal \
   --with-mpc=${HOME}/selflocal
$
$ LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} make
$ make install

プログラムサフィックスを設定しているのは作成バイナリ名でバージョンを
区別可能にするためです。
とりあえずこれでコンパイラの準備はできました。

●boost1.49を入れてみる
最新のmkvtoolnixだとboostのバージョンが低くて怒られちゃうので
これも最新のライブラリにしてあげる必要があります。
ただ、これはconfigure&Makefileでなくbootstrap&bjamなので
勝手が違って少し戸惑うかもしれないです。
debianのライブラリ名はシングルスレッド、マルチスレッドで
分離させているようなので分けてビルドします。

$ ./bootstrap 
$ PATH=${HOME}/selflocal/bin:${PATH} \
  LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \
  LD_RUN_PATH=${HOME}/selflocal/lib:${LD_RUN_PATH} \
  ./bjam link=shared,static threading=multi \
  install --prefix=${HOME}/selflocal --buildid=mt
 
 $ PATH=${HOME}/selflocal/bin:${PATH} \
  LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \ 
  LD_RUN_PATH=${HOME}/selflocal/lib:${LD_RUN_PATH} \ 
  ./bjam link=shared,static threading=single \
   install --prefix=${HOME}/selflocal

●mkvtoolnixのビルド
ここまでやってようやくmkvtoolnixのビルドの準備ができました。
tarボールでもhgでもいいのでソースを取得しましょう。
コンパイラはgcc-4.7を使いますのでパスの設定はしっかりとしましょう。
このバージョンではmakeの代わりにrubyベースのrakeが必要になります。
aptでインストールしておきましょう。
$  PATH=${HOME}selflocal/bin:${PATH} \
   LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \
   LD_RUN_LIB=${HOME}/selflocal/lib:${LD_RUN_LIB} \
  ./configure --prefix=${HOME}/selflocal \
   --with-boost-libdir=${HOME}/selflocal/lib \
   CC=gcc-4.7 CPP=cpp-4.7 CXX=g++-4.7 CXXCPP=cpp-4.7 \
   CFLAGS="-I${HOME}/selflocal/include" \
   CXXFLAGS="-I${HOME}/selflocal/include" \
   CPPFLAGS="-I${HOME}/selflocal/include"
$
$ PATH=${HOME}/selflocal/bin:${PATH} \
  LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \
  LD_RUN_PATH=${HOME}/selflocal/lib:${LD_RUN_PATH} rake
$ rake install

正直LD_RUN_PATHとかいらない気もしますが、念のため設定してます。
--with-boost-libdirをやらないと環境変数だけではうまくリンクできないようです。

これでインストール先のmmgやmkvmergeなどを実行すれば
mkvファイル操作を可能になります。
mmgのmkvmergeのパス指定以外はスタティックリンクビルドだけあって
ライブラリパス指定せずに実行できるのがスバラシイ!(笑


まあfoobar2000との相性はまだまだのようですが…
時々更新して見守ってみます。

0 件のコメント:

コメントを投稿