macOS下编译FFmpeg的universal binrary

背景

最近在做课程设计,主要用到Qt6和FFmpeg,希望能提供macOS版本的应用。为了避免Apple Silicon和Intel版本分发的困难,希望能打包成一份“universal binrary”。
对于Qt6来说,没有任何障碍,因为Qt6已经提供了universal binrary。然而,目前网络上提供FFmpeg预编译包要么是x86_64的,要么是arm64的,于是决定自己编译。中途踩了很多坑,写篇文章记录一下解决方案。

基本原理

  1. 交叉编译

    ./configure --enable-cross-compile --prefix=./install_x86_64 --arch=x86_64 --cc='clang -arch x86_64'
  2. 合并二进制文件

    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

最后修改:2022 年 04 月 13 日
如果觉得我的文章对你有用,请随意赞赏