macOS下编译FFmpeg的universal binrary
背景
最近在做课程设计,主要用到Qt6和FFmpeg,希望能提供macOS版本的应用。为了避免Apple Silicon和Intel版本分发的困难,希望能打包成一份“universal binrary”。
对于Qt6来说,没有任何障碍,因为Qt6已经提供了universal binrary。然而,目前网络上提供FFmpeg预编译包要么是x86_64
的,要么是arm64
的,于是决定自己编译。中途踩了很多坑,写篇文章记录一下解决方案。
基本原理
交叉编译
./configure --enable-cross-compile --prefix=./install_x86_64 --arch=x86_64 --cc='clang -arch x86_64'
合并二进制文件
lipo -create -arch arm64 {arm64_binrary} -arch x86_64 {x86_64_binrary} -output {universal_binrary}
其中能合并的二进制文件包括
executable
,.a
,.dylib
。
预编译共享库
这里提供预编译的共享库和构建脚本
https://github.com/ColorsWind/FFmpeg-macOS
参考
Stackoverflow关于交叉编译的讨论
https://stackoverflow.com/questions/71683881/ffmpeg-refuses-to-compile-for-x86-64-arch-on-m1-mac/71851433
FFmpeg关于平台的说明
https://ffmpeg.org/platform.html