在Mac上为iPhone进行交叉编译?

4

我该如何设置才能从我的OSX 10.7 MacBook Pro交叉编译到我越狱的第四代iPod touch。我的主要目标是能够将开源库移植到iPhone上。我似乎找不到任何有关iOS 4交叉编译的好/最新文章。

2个回答

4
经过一些尝试,我发现可以使用./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

他们所做的是帮助创建一个Makefile,该文件将把库和程序发送到/tmp/build文件夹中。

2
我也曾经有过同样的困扰。我尝试了所有的工具链,但都无法正常工作或创建x86_64二进制文件,这些文件在iOS上无法使用。
目前,我正在尝试直接在iPad上构建apr,因为我已经从Cydia安装了所有必需的东西,但是我卡在了kqueue.c不能正确编译的问题上。我已经移植了lua和一些其他软件,所以我可以说它通常是这样工作的。在本地平台上构建的主要原因是一些程序依赖于其他程序(例如:apr-util依赖于apr),因此其中一些程序必须运行。但是,在intel上运行arm是不可能的(至少没有模拟,而iPhone模拟器使用i386二进制文件)。
任何有兴趣在iOS上使用/构建UNIX工具的人都必须记住以下几点:
- 你可能会找到你想要的东西,但不一定能按预期工作(特别是针对开发人员的)。例如:apr在Cydia中提供,但它不是一个完整的包,因此构建apr-util是无用的。 - 你必须使用越狱设备。如果你破坏了操作系统并需要恢复,则可能会成为问题。一定要确保保存SHSH,以便能够恢复到可越狱的iOS。 - 如果你没有找到你要搜索的内容,事情会变得非常混乱。大多数软件虽然被认为可以在通用UNIX系统上工作,但在iOS上可能会有问题,这是因为iOS在结构和工作方式上与OS X相似,但在网络相关部分有所不同。此外,你可能还需要(伪)对构建的任何软件进行代码签名。 - 即使没有构建问题的软件也可能会带来意想不到的麻烦:我成功地为iOS构建了apache2,但运行时却遇到了SIGSYS,而没有更多的解释。
因此,请小心并做好准备,因为通常情况下事情并不容易。
关于Mac没有工具链(除了由Apple提供的工具链)的事实,这可能有一个解释,因为你不需要拥有Mac才能下载Xcode,而Mac的成本通常比开发人员愿意花费的要高。这意味着尽管Mac硬件最近有所增长,但做与你相同的事情的人并不多。工具链已经在Linux操作系统中(如Ubuntu)更或多或少地成功构建。你总是可以尝试使用虚拟机。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接