【问题标题】:Cross-compiling C to armv7 using arm-apple-darwin10-llvm-gcc-4.2使用 arm-apple-darwin10-llvm-gcc-4.2 将 C 交叉编译到 armv7
【发布时间】:2013-11-06 17:28:23
【问题描述】:

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

我有一个简单的 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

具体是哪个arm,具体如何编译成armv7?

【问题讨论】:

  • “它是哪个特定的手臂” - 它?什么”?你想在 iOS 设备上运行它吗?

标签: iphone c arm mach-o llvm-gcc


【解决方案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”二进制文件),这将在所有设备上工作。

【讨论】:

  • +1 获取有用信息。但是,当我指定“-arch armv7”时,它会返回:cc1:错误:无法识别的命令行选项“-arch”。以下是我正在使用的命令: $PLATFORM/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -o hello hello.c -arch armv7 -isysroot $PLATFORM/Developer/SDKs/iPhoneOS5.0 .sdk/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2014-08-03
  • 2010-10-07
  • 1970-01-01
  • 2014-10-06
  • 2016-12-26
  • 1970-01-01
相关资源
最近更新 更多