http://ffmpeg.zeranoe.com/blog/
http://zeranoe.com/scripts/mingw_w64_build/mingw-w64-build-3.2.3.tar.xz
解压以后,在一般的linux机器上执行也可以,在windows的mingw环境执行也可以,得到是不同BUILD_HOST的crosstool。
注意:NLS的支持有问题,libintl_fprintf的定义找不到,所以干脆禁止nls选项。
编译完成以后即得到mingGW-w64的cross-tool。400M吧。有了这个工具,接下来就可以编译各个组件了。
注意:需要svn和git工具
1,如果在linux,应该比较好安装,安装一个subversion和git。
2,如果在win7下,mingw里面安装svn和git,可能比较麻烦,可以之间安装它们的setup.exe然后把路径添加到mingw的path里面。
错误2,没有安装svn和git, 下载svn,安装http://blog.51yip.com/server/901.html wget http://subversion.tigris.org/downloads/subversion-1.6.1.tar.gz wget http://subversion.tigris.org/downloads/subversion-deps-1.6.1.tar.gz tar zxvf subversion-1.6.1.tar.gz tar zxvf subversion-deps-1.6.1.tar.gz cd subversion-1.6.1/ ./configure && make && make install git直接下载一个win版本,把位置添加到path中去, C:\Program Files (x86)\Git\bin
build x264
./configure \ --prefix=/home/Administrator/dist \ --cross-prefix=/home/Administrator/mingw-w64-i686/bin/i686-w64-mingw32- \ --disable-asm \ --disable-cli \ --enable-shared \ --enable-static \ --host=mingw32
build ffmpeg
PATH=/root/build/3rc/bin:$PATH \ PKG_CONFIG_PATH=/root/build/3rd/lib/pkgconfig \ ./configure \ --prefix=/root/build/3rd \ --extra-cflags="-I/root/build/3rd/include" \ --extra-ldflags="-L/root/build/3rd/lib/ -lx264 -static-libgcc" \ --target-os=mingw32 \ --arch=x86_32 \ --enable-gpl \ --enable-version3 \ --disable-w32threads \ --disable-avisynth \ --disable-bzlib \ --disable-fontconfig \ --disable-frei0r \ --disable-gnutls \ --disable-libass \ --disable-libbluray \ --disable-libcaca \ --disable-libfreetype \ --disable-libgsm \ --disable-libilbc \ --disable-libmp3lame \ --disable-libopencore-amrnb \ --disable-libopencore-amrwb \ --disable-libopenjpeg \ --disable-libopus \ --disable-librtmp \ --disable-libschroedinger \ --disable-libsoxr \ --disable-libspeex \ --disable-libtheora \ --disable-libtwolame \ --disable-libvo-aacenc \ --disable-libvo-amrwbenc \ --disable-libvorbis \ --disable-libvpx \ --enable-libx264 \ --disable-libxavs \ --disable-libxvid \ --disable-zlib \ --cross-prefix=/root/build/mingw-w64-i686/bin/i686-w64-mingw32- \ --enable-cross-compile \ --enable-memalign-hack
复制依赖的crt的dll和x264的dll
lib # pwd /root/build/mingw-w64-i686/i686-w64-mingw32/lib lib # ls *.dll libgcc_s_sjlj-1.dll libquadmath-0.dll libssp-0.dll libstdc++-6.dll
。。。。。
下载pkg-config
$ curl --url http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz -o pkg-config-0.28.tar.gz
build pkg-config
$ ./configure --prefix=/home/Administrator/dist --with-internal-glib CFLAGS="-march=i686"
生成了一个i686-pc-mingw32-pkg-config.exe 以及pkg-config.exe
但是在接下来的configure ffmpeg 的时候会出错,所以可能需要用cross-tool来编译pkg-config.
这个问题保留一下。
下载sdl为mingw32预先编译的二进制开发包,修改bin下面的sdl_config的prefix到实际存放的位置
/home/Administrator/build/SDL-1.2.15
build ffmpeg
修改configure脚本,不明白为什么sdl_config和pkg-config这2个命令需要添加$cross_prefix前缀,
先删除掉,否则易使用--enable-cross-compile --cross-prefix的时候,提示找不到工具.
PATH="/home/Administrator/dist/bin:/home/Administrator/build/SDL-1.2.15/bin:$PATH" \ PKG_CONFIG_PATH="/home/Administrator/dist/lib/pkgconfig" \ ./configure \ --prefix=/home/Administrator/dist \ --extra-cflags="-I/home/Administrator/dist/include" \ --extra-ldflags="-L/home/Administrator/dist/lib/ -lx264" \ --disable-avisynth \ --disable-bzlib \ --disable-fontconfig \ --disable-frei0r \ --disable-gnutls \ --disable-libass \ --disable-libbluray \ --disable-libcaca \ --disable-libfreetype \ --disable-libgsm \ --disable-libilbc \ --disable-libmp3lame \ --disable-libopencore-amrnb \ --disable-libopencore-amrwb \ --disable-libopenjpeg \ --disable-libopus \ --disable-librtmp \ --disable-libschroedinger \ --disable-libsoxr \ --disable-libspeex \ --disable-libtheora \ --disable-libtwolame \ --disable-libvo-aacenc \ --disable-libvo-amrwbenc \ --disable-libvorbis \ --disable-libvpx \ --disable-libxavs \ --disable-libxvid \ --disable-zlib \ --disable-yasm \ --enable-gpl \ --enable-version3 \ --enable-libx264 \ --enable-w32threads \ --enable-cross-compile \ --cross-prefix="/home/Administrator/mingw-w64-i686/bin/i686-w64-mingw32-" \ --target-os=mingw32 --arch=x86 \ --enable-memalign-hack \ --enable-ffplay
确实可以编出来ffplay.exe,但是如果没有任何参数执行ffplay.exe没有任何提示,可能是SDL对printf做了什么处理。
可以参考这个http://bbs.chinavideo.org/forum.php?mod=viewthread&tid=6813
如果直接拖一个视频文件到ffplay.exe图标上,可以正常播放视频.
========================
pkg-config
$ PATH=/home/Administrator/mingw-w64-i686/bin:$PATH ./configure --prefix=/home/Administrator/dist --with-internal-glib CFLAGS="-march=i686" --host=i686-w64-mingw32 CC=i686-w64-mingw32-gcc可以使用上述命令来cross编译pkg-config.因为添加了--host=i686-w64-mingw32,所以还会安装一个i686-w64-ming32-pkg-config.exe