FFMPEG 编译 iOS 静态库教程

1、首先,准备编译环境

  • 安装 Xcode 和 Command Line Tools
  • 下载和安装 gas-preprocessor
  • 安装 pkg-config

关于 gas-preprocessor,安装方式是直接 copy 文件 gas-preprocessor.pl/usr/bin ,记得修改权限可执行

原文给出的下载地址是 gas-preprocessor , 不过这里的版本比较老 , 因为在编译 ffmpeg 的时候,gas-preprocessor 版本必须和 ffmpeg 配合,所以如果你下载的 ffmpeg 源码是最新的,那么建议去 libav 网站 下载最新的 gas-preprocessor

如果之后在编译时候遇到类似这样的错误

unknown register alias 'TCOS_D0_HEAD'

那么可以尝试更换 gas-preprocessor 版本来解决

然后 pkg-config,可以直接通过 MacPorts 来安装

sudo port install pkgconfig

2、下载 FFMPEG 的源码

Git 下使用 git clone git://source.ffmpeg.org/ffmpeg.git

3、编译 armv7 的支持

configure 参数如下

./configure --prefix=armv7 --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-avresample --enable-cross-compile --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk" --target-os=darwin --cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" --extra-cflags="-arch armv7 -mfpu=neon -miphoneos-version-min=5.1" --extra-ldflags="-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -miphoneos-version-min=5.1" --arch=arm --cpu=cortex-a9 --enable-pic

编译和安装到 armv7 目录下

make clean && make && make install

4、编译 armv7s 的支持

configure 参数如下

./configure --prefix=armv7s --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-avresample --enable-cross-compile --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk" --target-os=darwin --cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" --extra-cflags="-arch armv7s -mfpu=neon -miphoneos-version-min=5.1" --extra-ldflags="-arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -miphoneos-version-min=5.1" --arch=arm --cpu=cortex-a9 --enable-pic

编译和安装到 armv7s 目录下

make clean && make && make install

5、编译 i386 的支持

configure 参数如下

./configure --prefix=i386 --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-avresample --enable-cross-compile --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk" --target-os=darwin --cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc" --extra-cflags="-arch i386" --extra-ldflags="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk" --arch=i386 --cpu=i386 --enable-pic --disable-asm

编译和安装到 i386 目录下

make clean && make && make install

如果一切顺利,那么 FFMPEG 目录下会分别生成 armv7、armv7s、i386 几个目录,里面 lib 文件下就是我们需要的静态库

6、最后合并 armv7、armv7s、i386 库

建立 universal/lib/ 目录 新建 bash 脚本,内容如下

#! /bin/sh

cd armv7/lib

for file in *.a
do
cd ../..
xcrun -sdk iphoneos lipo -output universal/lib/$file  -create -arch armv7 armv7/lib/$file -arch armv7s armv7s/lib/$file -arch i386 i386/lib/$file
echo "Universal $file created."
cd -
done
cd ../..

执行这个脚本,稍等完成后在 universal/lib/ 下就是我们需要的静态库了

以上这么简单的步骤就是编译 FFMPEG 为 iOS 静态库的方法,其他各种库编译方式也都大同小异 然后关于 configure 的参数,大家可以参考 FFMPEG 官网解释

最后修改:2017/09/04 17:54
如果觉得我的文章对你有用,请随意赞赏

2 条评论

  1. Cheris

    编译过程太慢了,而且出现很多配置错误,求大神给一份编译成功的静态库到邮箱 🙏

  2. hongquan

    <img src='https://ww4.sinaimg.cn/large/a15b4afegy1fcgqhwtenoj203902g743'>

发表评论

颜文字