用命令行编译Objective-C程序
最近在看Objc的开发,虽然Xcode很好用,但是还是不太习惯这种大型的IDE开发。于是自己尝试着在Terminal下面编译。先是最简单的一段程序。
#import <Foundation/Foundation.h> int main(int argc, const char *argv[]) { NSLog(@"Hello, World!"); return 0; }
直接 gcc helloworld.m,报错。
错误提示如下
Undefined symbols: "___CFConstantStringClassReference", referenced from: cfstring=Hello, World! in ccCxrkF8.o "_NSLog", referenced from: _main in ccCxrkF8.o ld: symbol(s) not found collect2: ld returned 1 exit status
猜测也许没有加载库,于是换用gcc hellowld.m -lobjc编译,依然是同样的错误。
猜测可能lib的位置不对,于是find了一下“Foundation”这个framework的位置,用以下命令编译:
gcc helloworld.m -L/System/Library/Frameworks/Foundation.framework/
还是一样的错误。
无奈之下man gcc从头看到尾。又去google了一下gcc for macosx。发现有一个-framework的选项。尝试了一下。
gcc helloworld.m -framework Foundation
终于成功了。
2010-04-22 19:11:11.643 a.out[8932:903] Hello, World!
总结一下:macosx下面,objc的系统调用都是集成在framework里面的,要想编译的话,就必须用-framework选项将framework包含进来才行。
相关推荐
ningningmingming 2020-05-01
shangs00 2020-03-06
hazing 2020-02-22
insularisland 2020-02-16
wanyi0 2020-11-03
onlykg 2020-08-01
xuguiyi00 2020-07-09
FlightForever 2020-06-28
zghover 2020-06-25
zllbirdonland 2020-06-16
choupiaoyi 2020-06-13
Wonder的学习 2020-06-11
cwgxiaoguizi 2020-06-07
secondid 2020-06-06
昭君出塞 2020-06-03
fushilin 2020-06-03
jackadmi 2020-06-03
85407718 2020-05-30
wanggongzhen 2020-05-28