用命令行编译Objective-C程序

无鸯 发布于 2011/08/24 15:22
阅读 2K+
收藏 0
最近在看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包含进来才行。

加载中
0
RickHuang
RickHuang
直接用TextMate,写好程序后按 Command+R 结果是,你懂得...
0
c61811
c61811

用了TextMate后,报错:

ld: can't open output file for writing: /Users/Xia/Documents/works/ios/helloworld.m.out, errno=13 for architecture x86_64

collect2: ld returned 1 exit status


0
c61811
c61811
解决了,原来是写入权限的问题.
返回顶部
顶部