gpt4 book ai didi

iphone - 如何为armv6、armv7和i386编译静态库(fat)

转载 作者:行者123 更新时间:2023-12-03 18:21:27 28 4
gpt4 key购买 nike

我知道这个问题已经被提出过多次,但我的目标与我在网上搜索到的内容略有不同。具体来说,我已经能够为 iPhone 构建静态库,但我能够构建的最终 fat 文件仅包含 arm 和 i386 架构(并且我不确定 arm 指的是:是 v6 还是 v7?)。我无法专门针对armv6和armv7进行编译,它们使用lipo合并这两种架构。 lipo 工具提示armv6 和armv7 库中存在相同的架构(arm,而不是armv6 或armv7)。

有人可以准确解释如何构建armv6和armv7,并使用lipo将这些库合并到一个FAT文件中吗?

编辑:我需要不使用 Xcode 进行构建,而是直接编译传统的 unix 库。

最佳答案

这是我找到的一个很好的解决方案:Static Libs With Support to iOS 5 and Arm64

编辑:

解决方案是构建不同的独立架构,然后使用 lipo 通过命令行(或 Rakefile)将它们绑定(bind)。

首先使用 xcodebuild 使用arm 构建二进制文件:

xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphoneos7.0' clean build ARCHS='armv7 armv7s' IPHONEOS_DEPLOYMENT_TARGET='5.0' TARGET_BUILD_DIR='./build-arm' BUILT_PRODUCTS_DIR='./build-arm'

请注意,您必须设置 IPHONEOS_DEPLOYMENT_TARGET='5.0' 和 ARCHS='armv7 armv7s',建议设置构建和产品目录以使事情更清晰,请查看build设置引用以了解此标志含义的更多详细信息.

arm64 的下一个版本:

xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphoneos7.0' clean build ARCHS='arm64' IPHONEOS_DEPLOYMENT_TARGET='7.0' TARGET_BUILD_DIR='./build-arm64' BUILT_PRODUCTS_DIR='./build-arm64'

请注意 ARCHS 和 IPHONEOS_DEPLOYMENT_TARGET 上的差异。我们还需要构建模拟器,此时我们必须将 sdk 更改为 iphonesimulator7.0,并首先分两步构建 i386:

xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphonesimulator7.0' clean build ARCHS='i386' IPHONEOS_DEPLOYMENT_TARGET='5.0' TARGET_BUILD_DIR='./build-i386' BUILT_PRODUCTS_DIR='./build-i386'

现在是棘手的部分!如果您只是根据 Xcode 设置将 ARCHS 更改为 x86_86,您将收到类似以下错误:“x86_64 不是有效的架构”。要避免这种情况,只需添加 VALID_ARCHS='x86_64':

xcodebuild -project 'StaticLibDemo.xcodeproj' -configuration 'Release' -sdk 'iphonesimulator7.0' clean build ARCHS='x86_64' VALID_ARCHS='x86_64' IPHONEOS_DEPLOYMENT_TARGET='7.0' TARGET_BUILD_DIR='./build-x86_64' BUILT_PRODUCTS_DIR='./build-x86_64'

最后我们只需要创建一个包含所有 5 种架构的胖二进制文件:

lipo -create './build-arm/libStaticLibDemo.a' './build-arm64/libStaticLibDemo.a' './build-i386/libStaticLibDemo.a' './build-x86_64/libStaticLibDemo.a' -output 'libStaticLibDemo.a'

作者为此创建了一个工作示例,您可以获取它:https://github.com/diogot/StaticLibDemo

<小时/>

这是帖子的链接:Static Libs With Support to iOS 5 and Arm64

所有功劳归 Diogo Tridapalli 所有。

关于iphone - 如何为armv6、armv7和i386编译静态库(fat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793392/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com