【问题标题】:Cross compile for iPhone on a mac?在 Mac 上为 iPhone 交叉编译?
【发布时间】:2011-11-05 14:55:00
【问题描述】:

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

【问题讨论】:

    标签: macos gcc cross-compiling toolchain armv6


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      • 你可能会找到你想要的,但并不是说它会按预期工作(这是专门为开发人员准备的。示例:apr 是在 Cydia 中提供的,但它不是一个完整的包,所以构建 apr 是没有用的-实用程序)。
      • 您必须使用越狱设备。如果您破坏操作系统并需要恢复,这可能会成为一个问题。请务必保存 SHSH,以便您能够恢复到可越狱的 iOS。
      • 如果您没有找到您正在搜索的内容,事情会变得非常混乱。大多数软件,虽然被认为可以在通用 UNIX 系统上运行,但在 iOS 上可能会出现问题,它在结构和工作方式上接近 OS X,但在与网络相关的部分下尤其存在差异。 此外,您可能必须对您构建的任何软件进行(假)代码签名。
      • 即使是没有构建问题的软件也可能会有意外的惊喜:我已经成功构建了适用于 iOS 的 apache2,但是当我运行时,我被 SIGSYS 卡住了,没有更多解释。

      所以,要小心并振作起来,因为事情通常并不容易。

      关于 Mac 没有工具链的事实(Apple 提供的工具链除外),这可能是一个解释,因为您不需要拥有 mac 来下载 Xcode,而 mac 的成本通常比开发人员愿意要花。这意味着没有多少人在做和你一样的事情,尽管最近 mac 硬件很火爆。工具链已经或多或少成功地为基于 Linux 的操作系统构建,例如 Ubuntu。您可以随时尝试使用虚拟机。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-30
        • 2017-08-04
        相关资源
        最近更新 更多