http://ffmpeg.zeranoe.com/blog/
MingGW-w64 Build Script 3.2.3
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
make && make install 得到ffmpeg.exe
复制依赖的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
接下来编译ffplay
。。。。。
下载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