第三方的脚本:
使用国内镜像安装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
生成的
已经添加了相关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
我找了一个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体积最小
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.a
和 libMyLibrary-arm64.a
中的所有符号和数据。合并后的文件大小通常比单个架构版本的文件大,但它允许您在支持多种 CPU 架构的设备上运行应用程序或库。
为了确保合并后的文件能够成功使用,您需要确保包含的每个架构版本都是可执行的,并且没有任何符号冲突或格式问题。
xcode中ffmpeg引入项目后,use of undeclared identifier 'nanosleep'
原因是ffmpeg也有time.h