Warning: fopen(http://blog.linluxiang.info/wp-cron.php?doing_wp_cron=1545227870): failed to open stream: HTTP request failed! in /home/linluxiang/site/www/blog.linluxiang.info/wp-includes/class-http.php on line 877
用命令行编译Objective-C程序 at 双木成林:喋喋不休

双木成林:喋喋不休

I leave no trace of wings in the air, but I am glad I have had my flight.

用命令行编译Objective-C程序

without comments

此文来自本人原JavaEye博客,原文地址

最近在看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

猜测可能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包含进来才行。

Written by linluxiang

二月 21st, 2011 at 8:28 下午

Posted in iOS,技术

Tagged with

Leave a Reply