如何链接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
答
回答编译成功后,我的问题。
您需要使用易于安装铛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
为什么你想在你的iPhone上编译GUI应用程序?为了做到这一点,你需要将所有相关的框架和头文件复制到手机上,并使用'--framework UIKit'将它们包含在链接过程中 – 2013-02-26 10:37:21
我需要编译它以获取二进制文件并运行它。以及为什么你建议“复制所有相关的框架和标题”如果我的问题是我需要什么特定的文件?这就像我问你某人的电话号码,你回复“你需要使用拨号盘给他打电话”。 – exebook 2013-02-26 10:59:40
你的手机并不是真的做这种工作的主意设备......说实话,我不确定需要什么文件,所以这不是一个答案。但我知道你需要将二进制文件链接到CoreFoundation和UIKit – 2013-02-26 22:29:29