这是一个非常简单的Objective-C控制台应用程序:
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
NSLog(@"Hello world!");
[pool drain];
return 0;
}
我在Mac上用gcc main.m -o main -ObjC -framework Foundation -framework CoreLocation
编译它。
我的Mac上也安装了iOS SDK。如何修改此命令以编译相同的代码在我的计算机上,以便在(越狱的)iOS设备上使用?
然后,我可以通过ssh传输可执行文件,并使用ldid
进行签名。
答案 0 :(得分:18)
对于简单的情况,这可能已经足够了:
gcc -o output -Wall -std=c99 source.m -framework Foundation -lobjc
<强>更新强>
此命令不适用于iOS命令行应用程序 - 必须正确设置arch。我目前没有iOS开发环境;可能是-march标志会有所帮助。
请参阅接受的答案。
答案 1 :(得分:4)
假设你没有与老式的GCC结合,故意触发我的项目中的错误,以便进入Xcode将显示所使用的命令行的位置,以显示以下内容进行编译:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -x objective-c -arch armv6 -fmessage-length = 0 -fdiagnostics-print-source-range-info -fdiagnostics-show-category = id -fdiagnostics-parseable-fixits -std = gnu99 -Wno-trigraphs -fpascal-strings -O0 -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -DDEBUG = 1 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -gdwarf-2 -mthumb“-DIBOutlet = attribute ((iboutlet))” “-DIBOutletCollection(类名)= <强>属性强>((iboutletcollection(类名)))” “-DIBAction = void”属性((ibaction)“ - miphoneos-version-min = 3.2 -iquote [簿记文件] -I [标题列表] -iquote [更多 header] -I [包含路径] -fpch-preprocess -F [指向目录的指针 对于调试文件] -include [my prefix header] -c AppDelegate.m -o AppDelegate.o
如果您拒绝使用Xcode,那么我猜你至少可以削减有关Interface Builder插座的东西。在我的项目中,为armv6而不是v7构建可能是一个错误。
然后,链接:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L [适当的东西] -F [适当的东西] -filelist [a .LinkFileList] -dead_strip -miphoneos-version-min = 3.2 -framework SystemConfiguration -framework UIKit -framework Foundation-framework CoreGraphics -o [适当的]
.LinkedFileList文件似乎只是一个目标文件列表,每行一个。 Xcode已经将完整的路径放在那里,尽管我猜测相对路径是可以接受的。
我很欣赏这不是一个完整的答案,但希望它有帮助吗?
答案 2 :(得分:4)
要在Mac上编译iOS代码,您需要使用交叉编译器,即在Intel平台上运行并能够生成ARM二进制代码的编译器。
Xcode确实提供了这样的交叉编译器。它位于(假设您使用的是从App Store分发的Xcode 4.3)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
对于一个简单的“hello world”程序,我正在使用
进行编译alias c="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2"
c -o hello hello.c -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/
答案 3 :(得分:2)
为什么不使用xcodebuild
而不是直接拨打gcc
?