在Mac上交叉编译iPhone?

时间:2011-08-28 20:16:17

标签: macos gcc cross-compiling toolchain armv6

我如何设置从我的OSX 10.7 Macbook pro到我的越狱第4代iPod touch的交叉编译。我的主要目标是能够将开源库移植到iphone。我似乎无法找到任何关于iOS 4交叉编译的好/近期文章。

2 个答案:

答案 0 :(得分:3)

经过一番尝试,我发现可以使用./configure并强制它为arm-apple-darwin11构建。您必须在./configure --some-flags

之后直接使用这些标志
CPP="cpp" CXXCPP="cpp" 
CXX="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2" CXXFLAGS="-O -arch armv6 -arch armv7 -isysroot $SDK_ROOT/SDKs/iPhoneOS5.0.sdk" 
CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2" CFLAGS="-O -arch armv6 -arch armv7 -isysroot $SDK_ROOT/SDKs/iPhoneOS5.0.sdk" 
AR="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar" 
AS="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as" 
LD="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld"
LDFLAGS="-lstdc++ -arch armv6 -arch armv7 -isysroot $SDK_ROOT/SDKs/iPhoneOS5.0.sdk"
LIBTOOL="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool"
STRIP="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/strip" 
RANLIB="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ranlib"

CPP和CXXCPP是必需的预处理器(默认值); CC和CXX是Xcode附带的arm的c和c ++编译器的路径,另一个是编译器获取的标志或定义编译时使用的最常用工具的路径的宏。我无法承认一切都会奏效,但这是你应该做的好事。 我建议添加./configure这些标志:

--prefix=/tmp/build --host=arm-apple-darwin11

他们所做的是帮助创建一个make文件,该文件将在/tmp/build下的文件夹中发送lib和程序。

答案 1 :(得分:2)

我也没有。我尝试的所有工具链最终都没有工作或创建x86_64二进制文件,这在iOS上无效。 我正在尝试直接在我的iPad上构建apr,因为我从Cydia安装了所有必需的东西,但我卡住了kqueue.c没有正确编译。我已经移植了lua和其他一些软件,所以我可以说一般以这种方式工作。构建本机平台而不是交叉编译的主要原因是某些程序依赖于其他程序(例如:apr-util on apr),因此必须运行其中一些程序。但是,不可能在intel上运行arm(至少没有模拟,iPhone模拟器使用i386二进制文件)。

任何有兴趣在iOS上使用/构建UNIX工具的人都必须牢记这些要点:

  • 你可能会找到你想要的东西,但它并没有说它会按预期工作(这特别适用于开发人员。例如:apr是在Cydia中提供的,但它不是一个完整的软件包,因此构建一个完整的软件包没有用UTIL)。
  • 您必须使用越狱设备。如果您破坏操作系统并需要恢复,这可能会成为一个问题。始终确保保存SHSH,以便您能够恢复到越狱的iOS。
  • 如果你没找到你正在搜索的东西,事情就会变得非常混乱。大多数软件虽然被认为可以在通用UNIX系统上运行,但在iOS上可能会出现问题,这在结构和工作方式上接近OS X,但在网络相关部分尤其如此。 此外,您可能必须(伪造)代码签署您构建的任何软件。
  • 即使没有构建问题的软件也可能会产生不必要的意外:我已经成功为iOS构建了apache2,但是当我运行时,我遇到了SIGSYS,没有太多解释。

所以,要小心并保护自己,因为通常情况并不容易。

关于Mac没有工具链(Apple提供的除外)的事实,这可能有一个解释,因为你不需要有一个mac来下载Xcode,而mac的成本通常比开发者更愿意要花。这意味着尽管最近出现了繁荣的mac硬件,但没有多少人做同样的事情。工具链或多或少已成功构建用于基于Linux的操作系统,例如Ubuntu。您始终可以尝试使用VM。