0

这似乎是一个非常具体的问题,但中心思想相当广泛。

我在 C 语言中有一个简单的 hello world 控制台应用程序。我在 Mac OS X 上使用以下命令对其进行了编译:

$ export PLATFORM=/Developer/Platforms/iPhoneOS.platform
$ $PLATFORM/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -o hello hello.c -isysroot $PLATFORM/Developer/SDKs/iPhoneOS5.0.sdk/

它编译成功,但给出以下警告:

ld: warning: -force_cpusubtype_ALL will become unsupported for ARM architectures

现在,当我跑步时,lipo -info hello我得到Non-fat file: hello is architecture: arm

它是哪个特定的手臂以及如何专门将其编译为armv7?

4

1 回答 1

1

A)“Lipo”仅适用于胖二进制文件(即多架构)。您在 Mach-O 文件、单一架构上运行它。如果您尝试“file hello”,它会告诉您“mach-o Executable arm”。

B)“arm”是,如果没有记错的话,armv6。您可以通过指定“-arch armv7”编译为 armv6。您还为 5S/iPad Air/Mini 2 指定了“armv7s”(用于 Apple A6 设备),现在还指定了 arm64(技术上为 armv8)。尽管从技术上讲,所有 ARM 架构也兼容 v6,而 v7/v7s 只会有所不同NEON/SIMD 指令。

C)您可以使用不同的 -arch 说明符为不同的架构(甚至 x86_64)编译多次,然后使用 lipo -create 将所有二进制文件融合到一个大二进制文件(因此名称为“fat”二进制文件),这将适用于所有设备。

于 2013-11-09T04:51:08.437 回答