0

我使用 ssh 到 iphone,并且可以使用 clang 或 gcc 在 iphone 上编译控制台应用程序。但是现在我如何才能链接到 UIKit?编译器找到标头并停留在链接上。

我应该将哪些参数传递给 clang?如何检查我是否有所需的静态/共享库?要链接的文件到底是什么?

示例程序:

#import <stdio.h>
#import <UIKit/UIView.h>

int main() {
        UIView *U = [UIView alloc];
        printf("OK\n");
        return 0;
}

这是命令行和错误:

$ clang main.m
Undefined symbols:
  "_OBJC_CLASS_$_UIView", referenced from:
      __objc_classrefs__DATA@0 in main-2RgCk6.o
  "_objc_msgSend", referenced from:
      _main in main-2RgCk6.o
ld: symbol(s) not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)

额外信息:

$ uname -a
Darwin devphone-teki-iPhone 13.0.0 Darwin Kernel Version 13.0.0: Sun Dec 16 19:58:44 PST 2012; root:xnu-2107.7.55~11/RELEASE_ARM_S5L8940X iPhone4,1 arm N94AP Darwin

$ clang --version
clang version 3.1 (trunk 152547)
Target: arm-apple-darwin13.0.0
Thread model: posix
4

1 回答 1

1

编译成功后回答我的问题。

您需要使用 apt 安装clang gcc p7zip 然后找到 sdk 3

iphone_sdk_3.1.3_with_xcode_3.1.4__leopard__9m2809a.dmg 

提取得到

iPhoneSDK3_1_2.pkg

然后再次解压到 -> ~/sdk

(你可能需要多次使用 7z 来提取更深),你会得到这个:

$ ls ~/sdk
Developer/  Entitlements.plist  ResourceRules.plist  SDKSettings.plist  System/   usr/

然后像这样编译

clang main.m -o main -isysroot ~/sdk/ \
-miphoneos-version-min=2 -L~/sdk/usr/lib -lobjc \
-framework UIKit \
-framework Foundation

一旦你得到'main',将它复制到你的应用程序文件夹并覆盖以前安装的应用程序。

cp main /var/stash/Applications.Q6ABC7/myApp.app/myapp
kill myapp

现在您可以单击应用程序的图标并查看它是否有效。

于 2013-02-27T08:01:26.430 回答