如何链接iphone上的uikit应用程序?

问题描述:

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

什么args我应该通过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: 
     [email protected] 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 
+0

为什么你想在你的iPhone上编译GUI应用程序?为了做到这一点,你需要将所有相关的框架和头文件复制到手机上,并使用'--framework UIKit'将它们包含在链接过程中 – 2013-02-26 10:37:21

+0

我需要编译它以获取二进制文件并运行它。以及为什么你建议“复制所有相关的框架和标题”如果我的问题是我需要什么特定的文件?这就像我问你某人的电话号码,你回复“你需要使用拨号盘给他打电话”。 – exebook 2013-02-26 10:59:40

+0

你的手机并不是真的做这种工作的主意设备......说实话,我不确定需要什么文件,所以这不是一个答案。但我知道你需要将二进制文件链接到CoreFoundation和UIKit – 2013-02-26 22:29:29

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

您需要使用易于安装铛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 

一旦你得到“主”把它复制到你的应用程序文件夹,并owerwrite以前安装的应用程序。

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

现在你可以点击你的应用程序的图标,看看它的作品。

+0

顺便说一下,这对于某人来说可能是有用的,框架似乎是苹果自己发明的clang的扩展,基本上就像smarter -l一样。通常gcc/clang会链接到.o,.a或.so(iphone上的dylib)文件。框架似乎链接到目录。有人可能会更多地了解它。 – exebook 2013-02-27 08:25:39