【问题标题】:Compiling an iOS App on iOS在 iOS 上编译 iOS App
【发布时间】:2013-12-26 09:03:41
【问题描述】:

所以我已经下载了 LLVM+Clang 并在我的 iPhone 上设置了 iOS SDK(7.0)。当我尝试编译一个名为 testProj 的测试项目时,该项目位于 /testProj,其中包含以下几行:

xcrun -sdk iphoneos clang

clang -v -ObjC -arch armv7s -mios-version-min=7.0 -isysroot/private/var/iPhoneOS7.0.sdk /testProj/testProj/main.m

我收到此错误:

clang: error: unable to execute command: posix_spawn failed: No such file or directory

它完美地编译了 main.m,包括 UIKit.framework 参考,我真的不明白这个错误的含义。有没有人理解我做错了什么,我在这里忘记了什么?

提前致谢

【问题讨论】:

    标签: ios objective-c compiler-construction compiler-errors llvm-clang


    【解决方案1】:

    clang-llvm 包只包含编译器和优化器。它不包含链接器 (ld),据我所知,它也不包含汇编器 (as)。

    您必须安装这些实用程序,其中最新版本(尽管仍然是 2009 版本...)可以在 Cydia 中找到,也可以从 Saurik 的存储库下载:odcctools_286-8_iphoneos-arm.deb


    为了解决一些常见错误,我想分享更多提示:

    1. 安装这些工具后,您仍然需要进行一些修改。特别是,您必须创建符号链接 (from -> to):
    $(SYSROOT)/usr/lib/libgcc_s.dylib -> libgcc.dylib
                    libSystem.B.dylib -> libSystem.dylib
                      libobjc.A.dylib -> libobjc.dylib
    

    (为了让 C++ 编译正常工作,可能需要进一步弄乱 C++ 标准库,我还没有尝试过。)

    1. 完成所有这些后,您将能够编译正常的可执行文件。但是,如果您愿意对 MobileSubstate 进行调整(因此您正在使用 -dynamiclib 标志编译动态库),您将遇到链接器无法找到定义 bundle1.o 的符号的错误。此问题的解决方案是将$(SYSROOT)/usr/lib/bundle1.o 目标文件与其他目标文件显式链接。

    2. 我不知道您在设备上的工具链上拥有哪个版本/构建,但我在安装过程中遇到了一个错误(我不再记得我从包中获得的位置)。我认为 clang/LLVM 编译器的代码生成器存在问题,因为如果我在启用优化的情况下进行编译,任何重要的程序都会出现段错误。 (并不是我写了错误的代码,因为我试图编译和运行享有盛誉的、经过良好测试的库和程序,这些库和程序也会引发分段错误......)所以如果你碰巧运行了这个错误的版本编译器,然后远离优化。 (如果你不这样做,那么请告诉我你在哪里找到了更好的:P)

    【讨论】:

    • CoolStar 有一些更新的工具链包 - 试试 BigBoss 中的 Darwin CC 工具 (org.coolstar.cctools)。也可以通过“iOS Toolchain”包下载他的整个工具链。
    • @kirb 我认为确实是CoolStar的版本,他什么时候更新了包?
    • 所以我现在收到错误 ld: unknown/unsupported architecture name for: -arch armv7s 并且有一些东西让我很生气:libSystem.B.dylib 存在,以及 libSystem.dylib 并且它们不相等。与libobjc.A.dylib -> libobjc.dylib 相同。
    • @user2456014 使用-arch armv7-arch armv6 标志。
    • 当我使用-arch armv7时,我得到未定义符号错误:Undefined symbols for architecture armv7: "_NSStringFromClass", referenced from: _main in main-NCks4A.o "_OBJC_CLASS_$_AppDelegate", referenced from: objc-class-ref in main-NCks4A.o "_UIApplicationMain", referenced from: _main in main-NCks4A.o "_objc_autoreleasePoolPop", referenced from: _main in main-NCks4A.o "_objc_autoreleasePoolPush", referenced from: _main in main-NCks4A.o "_objc_msgSend", referenced from: _main in main-NCks4A.o ld: symbol(s) not found for architecture armv7
    【解决方案2】:

    试试 CppCode ios 应用程序 - http://www.cppcode.info。它是在 iOS 上运行的 IDE 和编译器。不需要jb,不需要互联网

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 2015-03-23
      • 2012-05-06
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多