1. 预先条件
- cmake
- nasm
- mingw-w64
- mingw-w64-tools
sudo apt install cmake nasm mingw-w64 mingw-w64-tools
2. 交叉编译 X264
git clone https://code.videolan.org/videolan/x264.git
cd x264
PREFIX_X264=/path/to/install/x264
./configure --cross-prefix=x86_64-w64-mingw32- --host=mingw64 --disable-swscale --disable-lavf --enable-pic --enable-static --prefix=${PREFIX_X264}
make
make install
3. 交叉编译 X265
参考X265 CrossCompile
git clone https://github.com/videolan/x265.git
cd x265
或者
git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git
- 在build目录下新建一个文件夹, 例如"cross_for_win",再在该目录下新建一个toolchain文件(build.cmake),内容如下:
SET(CMAKE_SYSTEM_NAME Windows)
SET(cross_prefix x86_64-w64-mingw32-)
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")
PREFIX_X265=/path/to/install/x265
cmake -DCMAKE_TOOLCHAIN_FILE=build.cmake -DCMAKE_INSTALL_PREFIX=${PREFIX_X265} -DENABLE_SHARED=0 -DENABLE_PIC=1 ../../source
make
make install
- 然后,修改生成的
x265.pc
(在 ${PREFIX_X265}/lib/pkgconfig下),将Libs.private
行的参数拷贝追加到Libs
行,并添加-static
。原始x265.pc
文件中如下:(可能不同环境下不一样)
Libs: -L${libdir} -lx265
Libs.private: -lstdc++ -lgcc -lgcc
Libs: -L${libdir} -lx265 -lstdc++ -lgcc -lgcc -static
Libs.private: -lstdc++ -lgcc -lgcc
4. 交叉编译 FFMPEG
参考 CrossCompilingForWindows
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
- 配置 PKG_CONFIG_PATH, 以便
pkg-config
能够正确找到x264, x265
export PKG_CONFIG_PATH=${PREFIX_X264}/lib/pkgconfig:${PREFIX_X265}/lib/pkgconfig
- 配置并编译,生成动态库。(可新建一个目录,例如"build")
mkdir build
cd build
PREFIX_FFMPEG=/path/to/install/ffmpeg
../configure --arch=x86 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- --enable-libx265 --enable-libx264 --enable-shared --enable-pic --enable-gpl --enable-version3 --prefix=${PREFIX_FFMPEG}
make
make install