Ubuntu交叉编译FFmpeg(x264\265)
参考地址:https://blog.youkuaiyun.com/qq_30103413/article/details/116987928
1. 预先条件
sudo apt install cmake nasm mingw-w64 mingw-w64-tools gcc-mingw-w64-i686 g++-mingw-w64-i686
2.交叉编译X264
- 配置并编译,本文只采用了静态链接。
mkidr build_i686
cd build_i686
PREFIX_X264=/home/zst/ffmepg_build/output/x264_i686
../configure --enable-static --enable-win32thread --host=i686-w64-mingw32 --cross-prefix=i686-w64-mingw32- --prefix=${PREFIX_X264}
make
make install
3.交叉编译 X265
- 在build目录下新建一个文件夹,
例如"build_i686",再在该目录下新建一个toolchain文件(build.cmake),内容如下:
#!cmake
# this one is important
SET(CMAKE_SYSTEM_NAME Windows)
SET(cross_prefix i686-w64-mingw32-)
# specify the cross compiler
SET(CMAKE_C_COMPILER ${cross_prefix}gcc)
SET(CMAKE_CXX_COMPILER ${cross_prefix}g++)
SET(CMAKE_RC_COMPILER ${cross_prefix}windres)
SET(CMAKE_ASM_NASM_COMPILER nasm)
SET(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-static-libgcc -static-libstdc++ -static -O3 -s")
- 采用cmake配置生成工程,并编译
PREFIX_X265=/home/zst/ffmepg_build/output/x265_i686
cmake -DCMAKE_TOOLCHAIN_FILE=build.cmake -DCMAKE_INSTALL_PREFIX=${PREFIX_X265} -DENABLE_SHARED=0 -DENABLE_PIC=1 ../../source
make
make install
- 修改生成的x265.pc,新增-lstdc++ -lgcc -lgcc -static
Libs: -L${libdir} -lx265 -lstdc++ -lgcc -lgcc -static
Libs.private: -lstdc++ -lgcc -lgcc
4.交叉编译 FFMPEG
- 配置 PKG_CONFIG_PATH, 以便pkg-config能够正确找到x264, x265
export PKG_CONFIG_PATH=${PREFIX_X264}/lib/pkgconfig:${PREFIX_X265}/lib/pkgconfig
- 配置并编译,生成动态库。(可新建一个目录,例如"build_i686"),添加–extra-ldflags='-static-libgcc’配置去除libgcc_s_dw2-1.dll的依赖
mkdir build_i686
cd build_i686
PREFIX_FFMPEG=/home/zst/ffmepg_build/output/ffmpeg_i686
../configure --arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- --enable-libx265 --enable-libx264 --enable-shared --enable-pic --enable-gpl --enable-version3 --extra-ldflags='-static-libgcc' --prefix=${PREFIX_FFMPEG}
make
make install
../configure --arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- --enable-libx265 --enable-libx264 --enable-shared --enable-pic --enable-gpl --enable-version3 --extra-ldflags=-static-libgcc --prefix=/home/zst/ffmepg_build/output/ffmpeg_i686 --enable-yasm --disable-nonfree --enable-runtime-cpudetect --disable-gray --disable-swscale-alpha --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-avdevice --enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale --disable-postproc --enable-avfilter --disable-avresample --enable-network --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-encoders --enable-encoder=png --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=flv --enable-decoder=h264 --enable-decoder='mp3*' --enable-decoder=vp6f --enable-decoder=flac --enable-decoder=hevc --enable-decoder=vp8 --enable-decoder=vp9 --disable-hwaccels --disable-muxers --enable-muxer=mp4 --disable-demuxers --enable-demuxer='ijk*' --enable-demuxer=aac --enable-demuxer=concat --enable-demuxer=data --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=live_flv --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=mpegps --enable-demuxer=mpegts --enable-demuxer=mpegvideo --enable-demuxer=flac --enable-demuxer=hevc --enable-demuxer=webm_dash_manifest --disable-parsers --enable-parser=aac --enable-parser=aac_latm --enable-parser=h264 --enable-parser=flac --enable-parser=hevc --enable-bsfs --disable-bsf=chomp --disable-bsf=dca_core --disable-bsf=dump_extradata --disable-bsf=hevc_mp4toannexb --disable-bsf=imx_dump_header --disable-bsf=mjpeg2jpeg --disable-bsf=mjpega_dump_header --disable-bsf=mov2textsub --disable-bsf=mp3_header_decompress --disable-bsf=mpeg4_unpack_bframes --disable-bsf=noise --disable-bsf=remove_extradata --disable-bsf=text2movsub --disable-bsf=vp9_superframe --disable-bsf=eac3_core --enable-protocols --enable-protocol=async --disable-protocol=bluray --disable-protocol=concat --disable-protocol=crypto --disable-protocol=ffrtmpcrypt --enable-protocol=ffrtmphttp --disable-protocol=gopher --disable-protocol=icecast --disable-protocol='librtmp*' --disable-protocol=libssh --disable-protocol=md5 --disable-protocol=mmsh --disable-protocol=mmst --disable-protocol='rtmp*' --enable-protocol=rtmp --enable-protocol=rtmpt --disable-protocol=rtp --disable-protocol=sctp --disable-protocol=srtp --disable-protocol=subfile --disable-protocol=unix --disable-devices --disable-filters --disable-iconv --disable-audiotoolbox --disable-videotoolbox --disable-linux-perf --disable-bzlib