ビルドするのに必要な環境などは、GCC 4.7の記事を参考にしてください。
GCC 4.7のビルドmingwrtとw32apiの代わりに、mingw-w64をインストールします。
mingw-w64-v1.0.6mingw-w64も自前でビルドしたい方は、こちらを参考にしてください。
MinGW-w64のビルド以下のライブラリを、GCC 4.7でコンパイルしてインストールします。
winpthreadszlib-1.2.7libiconv-1.14gmp-5.1.1mpfr-3.1.2mpc-1.0.1isl-0.11.1cloog-0.18.0GCC 4.7のビルドに必要だったPPLは、GCC 4.8では不要になりました。
GCC 4.8のソースコードは、このページから適当なサーバを選んでダウンロードしてください。
http://gcc.gnu.org/mirrors.htmlこの辺りから、
http://ftp.tsukuba.wide.ad.jp/software/gcc/snapshots/4.8.0-RC-20130316/gcc-4.8.0-RC-20130316.tar.bz2
を、ダウンロードします。
そのままビルドすると、libstdc++-v3の所で、こんなエラーが出ます。
../../../../../gcc-4.8.0-RC-20130316/libstdc++-v3/src/c++11/thread.cc:67:4: error: #error "No sleep function known for this target"
# error "No sleep function known for this target"
libstdc++-v3/configureで、sleep関数とusleep関数をチェックして見つからない場合、次にWindowsのSleep関数が見つかれば、thread.ccでそちらを使う仕組みになっているのですが、誤記のせいで、WindowsのSleep関数のチェック自体がスルーされていました。
libstdc++-v3/configure の19903行目
if test x"$ac_has_nanosleep$ac_has_sleep" = x"nono"; then
「x"nono"」を「x"no"」に修正します。
その他、libiberty/make-temp-file.c に、「GCC 4.5辺りからずっと適用していて、いまだに必要なのかよくわからないパッチ」を、念のため適用します。
make-temp-file.diff$ tar xjf gcc-4.8.0-RC-20130316.tar.bz2
$ cd gcc-4.8.0-RC-20130316
$ patch -p1 < ../make-temp-file.diff
$ sed -i.orig 's/nono/no/g' libstdc++-v3/configure
GCCのソースコードと同じ階層にbuildディレクトリを作成して、configureを実行します。
$ cd ..
$ mkdir build
$ cd build
$ ../gcc-4.8.0-RC-20130316/configure --prefix=/mingw --build=mingw32 --with-arch=i686 --with-tune=generic --enable-threads=posix --enable-languages=c,c++,objc,obj-c++ --enable-libgomp --disable-sjlj-exceptions --with-dwarf2 --enable-version-specific-runtime-libs --disable-win32-registry --disable-werror --disable-nls --enable-lto --with-system-zlib --enable-libstdcxx-debug --enable-cxx-flags='-fno-function-sections -fno-data-sections' --enable-fully-dynamic-string --disable-libstdcxx-pch --disable-bootstrap
「--enable-lto」はデフォルトでenableになっているので、必要ないかもしれません。
ここまで、追加ライブラリーなどのエラーがなければ、makeします。
$ make -j3 CFLAGS="-O2 -D__USE_MINGW_ACCESS" CFLAGS_FOR_TARGET="-O2 -D__USE_MINGW_ACCESS" CXXFLAGS="-mthreads -O2" CXXFLAGS_FOR_TARGET="-mthreads -O2" LDFLAGS="-s" 2>err.log 1>out.log
「-j3」の数値は、PC環境に合わせて、適当に増やしたり減らしたりしてください。
logを見て、エラーで止まっていなければOKです。
いきなりMinGW環境に上書きして失敗すると取り返しがつかないので、こんな感じで仮インストールします。
仮インストール先のディレクトリは、TDM-GCCのビルドスクリプトを参考にしています。
$ make DESTDIR=/develop/sandpit/dw2 install
エラーで止まらなければ完成です。
あとは、以下のようにMinGW環境に丸ごとコピーします。
$ cp -pr /develop/sandpit/dw2/mingw /c/.
これで、GCC 4.8が使えるようになります。
試しに、自前ビルドしたGCC 4.8でx264を「make fprofiled」してみたら、x264.exeがクラッシュしてしまいました(笑)
ffmpegとlibvpxは、エラーもなくmakeできて、VP8動画のエンコードもできました。
いち早くGCC 4.8を使ってみたいという方は、参考にしてください。
2013/03/24 追記RC版が出てすぐ、3/22にGCC 4.8.0がリリースされました。
http://gcc.gnu.org/gcc-4.8/ソースコードは、この辺りからダウンロードしてください。
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.0/gcc-4.8.0.tar.bz2
ビルドの手順は、「gcc-4.8.0-RC-20130316」が「gcc-4.8.0」になるだけで、RC版と変わりません。
x264は、configureオプションに「--enable-debug」を追加して、
$ ./configure --enable-win32thread --prefix=/mingw --enable-debug
としてみたら、「make fprofiled」できました。
その他、当サイトで紹介しているライブラリなど、自前ビルドしたGCC 4.8.0で全部makeし直してみましたが、特に問題なさそうです。
2013/03/27 追記問題なさそうと思ったら、いろいろ問題がありました。
x264のconfigureオプションについては、「--extra-cflags="-fno-aggressive-loop-optimizations"」を追加して、
$ ./configure --enable-win32thread --prefix=/mingw --extra-cflags="-fno-aggressive-loop-optimizations"
としたら、「make fprofiled」できました。
「-fno-aggressive-loop-optimizations」は、GCC 4.8.0で追加されたオプションです。
http://gcc.gnu.org/gcc-4.8/changes.htmlGCC 4.8.0でビルドしたffmpegは、wmv9のデコードに問題があるようで、wmv9の動画を入力にするとクラッシュします。
他にも問題が出てくるかもしれませんので、しばらくは様子見です。
2013/04/26 追記x264がクラッシュする問題は、r2276で修正されました。
Fix array overreads that caused miscompilation in gcc 4.8
http://git.videolan.org/gitweb.cgi?p=x264.git;a=commitdiff;h=89aecb440e2939be7fb72d8362eb12504711b94fその他、ffmpegのwmv9のデコードに問題があると思ったら、avisynthと相性が悪いようです。
携帯動画変換君で、avisynthを経由してwmvファイルを読み込む時に、avisynthがエラーになっていました。
avisynth「AVS 2.6.0 Alpha 4」をインストールすれば、エラーになりませんでした。
または、携帯動画変換君でavisynthを使わないように、
C:\Program Files\3GP_Converter\
にある、3GP_Converter.ini の、
DisableAVS=0
を
DisableAVS=1
に修正すればOKです。