ios - 构建 FFmpeg 以在 Swift 中使用
问题描述
新的 XCode/Swift 版本提供了使用二进制依赖项的能力。在我看来,这似乎是为 FFMpeg 创建 SPM 包的理想时机。
然而,虽然我去年一直在学习编写 i Swift 代码,但实际上我对如何构建库并不是很熟悉,尤其是那些像 FFmpeg 这样复杂且具有所有可配置库和第三方依赖项的库。
有kewlbear 的 iOS 构建脚本,但这些脚本适用于 iOS/tvOS,理想情况下,FFMpeg SPM 包也可用于 MacOS。它也没有针对最新的 Xcode 和 Swift 版本进行更新。
我个人的兴趣只是音频,我不需要很多花里胡哨,但我认为理想的情况是一个完整的包,包含整个源代码和它需要的任何依赖项,然后当它被用作包依赖项时,编译器只会使用它需要的部分。
我想我的问题是......我将如何理想地为此目的编译 ffmpeg 代码。我正在尝试按照自己编译的说明进行gettext
操作,但是由于我不确定是否应该按照说明(在gettext
源代码中)为多种架构编译胖二进制文件,因此我被困在了编译点上,并且当我尝试运行时:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
我收到以下错误:
checking whether the C compiler works... no configure: error: in
`/Users/nolainecrusher/Downloads/FFMpeg-source/gettext-0.21/gettext-runtime':
configure: error: C compiler cannot create executables See
`config.log' for more details configure: error: ./configure failed for
gettext-runtime
并config.log
没有真正告诉我任何有用的信息:
这是我在日志末尾看到的:
mkdir_p='$(MKDIR_P)' oldincludedir='/usr/include' pdfdir='${docdir}'
prefix='/usr/local' program_transform_name='s,x,x,' psdir='${docdir}'
sbindir='${exec_prefix}/sbin' sharedstatedir='${prefix}/com' subdirs='
gettext-runtime libtextstyle gettext-tools' sysconfdir='${prefix}/etc'
target_alias=''
我觉得我可能会以错误的方式解决这个问题,但我不确定正确的方式是什么。
解决方案
请参阅以下内容:
FFmpeg 的 Swift 包装器包和 FFmpeg的 AC 包装器包
SwiftFFmpeg 假定 ffmpeg 安装在本地,并将与这些库链接。此外,SwiftFFmpeg 使用 CFFmpeg 作为包依赖项,您的应用可以使用 SwiftFFmpeg 作为依赖项。
如果您想查看编译 ffmpeg(x86_64 和 arm64)的构建脚本,请查看我自己的音频播放器项目。
推荐阅读
- node.js - 如何在不重新启动节点服务器的情况下反映语言环境更改 - i18n?
- c# - 为什么在反序列化期间尝试解析派生类型时会出错?(Newtonsoft.Json)
- javascript - 如何在 Chrome 中为某些字段禁用用户名自动填充?
- scala - 在 Scala 2.13 中发布一个暴露库的 SBT 插件
- python - Python - 字符串转换为列表
- encryption - ISAP 轻量级加密算法
- sql-server - 将表数据类型从 SQL Server 转换为 Oracle 并将动态 SQL 数据插入到表数据类型
- python - 如何根据同一个类的另一个属性的值来访问一个类的属性?
- typescript - 如何使用 TypeScript 中预定义的可接受值正确声明自定义类型?
- ruby - docker-compose 选择了错误的 ruby 版本