[✔️]mac上编译使用ffmpeg

简介: [✔️]mac上编译使用ffmpeg

第三方的脚本:




使用国内镜像安装HomeBrew


/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"


如果安装比较慢,或者卡壳,更换源即可


查看ffmpeg的版本号:


不知道版本号怎么填,看这个下载页面就明白了: www.ffmpeg.org/releases/


brew install yasm


yasm: 免费开源的汇编编译器


curl: (35) error:02FFF036:system library:func(4095):Connection reset by peer
Error: Failure while executing; `/usr/bin/env /usr/local/Homebrew/Library/Homebrew/shims/shared/curl --disable --cookie /dev/null --globoff --user-agent Homebrew/4.0.9-20-gce07d6a\ \(Macintosh\;\ Intel\ Mac\ OS\ X\ 12.6\)\ curl/7.79.1 --header Accept-Language:\ en --fail --progress-bar --location --remote-time --output /Users/admin/Library/Caches/Homebrew/api/formula.jws.json --compressed --speed-limit 100 --speed-time 5 --progress-bar https://formulae.brew.sh/api/formula.jws.json` exited with 35. Here's the output:
curl: (35) error:02FFF036:system library:func(4095):Connection reset by peer 


一直提示装不上,直接下载源码编译按照: yasm.tortall.net/Download.ht…


# http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
./configure 
make 
sudo make install


如果一切顺利,最终的文件在shell脚本的同目录的thin/arch里面


building for macOS, but linking in object file built for iOS Simulator


设置为YES就可以了,可能跟fat有关系,库是通过lipo -create生成的


image.png


已经添加了相关lib,但是运行的时候仍旧报错,提示undefined symbols


ld: warning: ignoring file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libbz2.tbd, missing required architecture x86_64 in file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libbz2.tbd (4 slices)
ld: warning: ignoring file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libz.tbd, missing required architecture x86_64 in file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libz.tbd (4 slices)
ld: warning: ignoring file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libiconv.tbd, missing required architecture x86_64 in file /Applications/Xcode13.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.4.sdk/usr/lib/libiconv.tbd (4 slices)


arch不匹配导致


依赖的第三方库和framework


  • CoreVideo


  • CoreAudio


  • CoreMedia


  • CoreFoundation


  • VideoToolbox


  • AudioToolbox


  • Security


  • libbz2


  • libz


  • libiconv


error: The linked library 'libswscale.a' is missing one or more architectures required by this target: armv7.


我生成的库文件的确是只支持arm64,项目配置的arch是arm64,armv7


image.png


我找了一个engine支持的lib,发现它是支持多平台的


$ lipo -info libchipmunk.a 
Architectures in the fat file: libchipmunk.a are: armv7 i386 x86_64 arm64


如果库文件支持多个arch,而项目只支持部分arch,xcode在编译时,会根据Build Active Architecture Only的设置进行裁剪,以达到app体积最小


image.png


cocos的ios是包含armv7 i386 x86_64 arm64,但是mac的arch仅仅有x86_64,不过发现部分库也支持i386


mac/ios arch


这些都是指代 CPU 架构的名称,常见于 iOS 和 macOS 开发中。它们分别代表着不同的处理器架构,如下所示:


  • armv7:一种 32 位的 ARM 处理器架构,广泛应用于许多移动设备中,包括 iPhone 3GS、iPhone 4、iPad 1、iPod Touch 3G 和 iPod Touch 4G 等。


  • i386:Intel 32 位 x86 处理器架构,主要用于旧版的 Mac 计算机上。


  • x86_64:Intel 64 位 x86 处理器架构,用于现代 Mac 计算机和大多数 PC 上。


  • arm64:一种 64 位的 ARM 处理器架构,用于 Apple 的 A7 芯片以及之后的处理器,如 iPhone 5s、iPad Air 等。


在开发和构建 iOS 和 macOS 应用程序时,您需要使用适当的 CPU 架构来编译和链接您的代码。例如,如果您编写的应用程序旨在支持所有 iOS 设备,则必须将其编译为 armv7、armv7s 和 arm64 架构。如果您编写的应用程序仅针对 macOS Intel 计算机,则只需编译为 i386 和 x86_64 架构即可。


这些 CPU 架构的选择会影响应用程序的二进制文件大小、性能和可移植性,因此您应该根据应用程序的特定需求和目标平台来选择正确的架构。


lipo


lipo -create 是一个命令行工具,可用于将多个可执行文件或静态库合并为一个“fat”二进制文件。在 macOS 和 iOS 应用程序开发中,它通常用于将应用程序或库的不同CPU架构版本合并为一个单独的可执行文件,以便可以在多个设备上运行。


lipo 工具的 -create 选项需要指定要合并的所有二进制文件路径,并将结果输出到新的单个二进制文件中。例如,以下命令可将名为 libMyLibrary.a 的静态库文件的 armv7 和 arm64 架构版本合并为一个 fat 文件:


lipo -create /path/to/libMyLibrary-armv7.a /path/to/libMyLibrary-arm64.a -output /path/to/libMyLibrary-fat.a


这将创建一个新的 libMyLibrary-fat.a 文件,其中包含了 libMyLibrary-armv7.alibMyLibrary-arm64.a 中的所有符号和数据。合并后的文件大小通常比单个架构版本的文件大,但它允许您在支持多种 CPU 架构的设备上运行应用程序或库。

为了确保合并后的文件能够成功使用,您需要确保包含的每个架构版本都是可执行的,并且没有任何符号冲突或格式问题。


xcode中ffmpeg引入项目后,use of undeclared identifier 'nanosleep'


原因是ffmpeg也有time.h



目录
相关文章
|
5月前
|
开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(三)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(三)
81 0
|
5月前
|
Linux 编译器 数据安全/隐私保护
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
240 0
|
5月前
|
Linux
Linux编译FFmpeg
Linux编译FFmpeg
132 0
|
4月前
|
Ubuntu
蓝易云 - Ubuntu18.04安装编译ffmpeg库
现在,你应该已经在你的Ubuntu 18.04系统上成功安装和编译了FFmpeg库。你可以通过运行 `ffmpeg -version`来验证安装是否成功。
52 0
|
5月前
|
数据库管理
Mac检出svn checkout报错 svn: E200030: SQLite 编译为 3.39.5,但是运行于 3.39.4
Mac检出svn checkout报错 svn: E200030: SQLite 编译为 3.39.5,但是运行于 3.39.4
209 0
|
5月前
|
Ubuntu Linux Shell
Android-NDK-clang 编译 FFmpeg
Android-NDK-clang 编译 FFmpeg
152 0
|
5月前
|
移动开发 Unix Linux
ffmpeg编译so
ffmpeg编译so
54 0
|
5月前
|
编解码 IDE 开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(一)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(一)
43 1
|
5月前
|
开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
61 0
|
5月前
|
Kubernetes NoSQL Java
ChaosBlade常见问题之在mac下编译报checksum mismatch的错误如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
下一篇
无影云桌面