编译iOS的C源代码

Dan*_*Dan 6 c gcc arm cross-compiling ios

我有一些要用C编写的现有源代码,我想要构建并将其包含在我的iOS项目中。整个源代码包非常大,并使用现有的Makefile和GCC构建。它正在生成静态库(.a文件),我希望将其移至我的iOS项目。但是,Makefile生成的静态库适用于x86处理器,显然在iOS上不起作用。

有没有一种方法可以切换GCC来为ARMv7 / ARM64构建,而无需更改现有源(在大多数情况下)?我知道有用于GCC的-march开关,或者您可以下载ARM特定的GCC编译器,所以我知道为与构建机器不同的体系结构进行构建的一般概念。

要在Mac OS上为ARM进行构建,是否需要下载其他GCC编译器,或者该功能是否已内置到默认GCC中?

很抱歉,这里对基本概念缺乏理解;我主要是Java和Objective-C开发人员,因此对我来说,为不同体系结构构建源代码主要是外国的概念。

mar*_*rko 6

虽然 GCC 支持很多 CPU 架构和平台,但它通常是为单一架构和平台构建的。要针对 ARM 进行编译,您通常需要一个针对 ARM 的交叉编译 GCC。

适用于所有架构的 MacOSX 和 iOS 的默认系统编译器是clang并且已经有一段时间了(开发工具中提供的 GCC 苹果的最后一个版本是吱吱作响和过时的,绝对不会支持 ARMv8)。

通常的获取方式clang是安装 Xcode(从 App Store 免费)。安装程序(以及 Xcode 的 UI)中有一个选项可以安装命令行工具包。这会将符号链接安装/usr/bin到编译器中,并安装一堆您可能期望的其他东西,例如make.

clang是(大部分)命令行兼容的gcc,此外,您会发现,如果您在gcc安装了 dev-tools 的 Mac 上从命令行运行,您实际上会得到 clang。

$ gcc --version
Configured with: --    prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix 
Run Code Online (Sandbox Code Playgroud)

clangMacOSX 上带有 ARMv7、ARMv8、i686、x86_64,并且可以配置为从命令行编译其中任何一个(请参阅文档

鉴于上述情况,您的代码很可能会使用现有的 makefile 对编译器标志进行最少的更改进行编译。您可能需要阅读文档lipo- 它允许您生成多架构二进制文件。

  • 谢谢马尔科!我能够准确地确认您在帖子之前提到的内容(无论如何都感谢您的确认!)。我经历了并用'xcrun -sdk iphoneos clang -arch armv7'替换了'/bin/gcc',并且能够为arm编译所有东西。我知道有一种方法可以制作一个通用库,我接下来会做,并将 armv7、arm64 和 x86 库组合在一起。 (3认同)
  • @Dan 我一直在寻找那个命令。谢谢!`xcrun -sdk iphoneos clang -arch armv7 main.c` (2认同)