第三方的脚本:
-
github.com/kewlbear/FF…
-
github.com/Eafy/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
生成的
现已添加了相关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