用命令行编译Objective-C程序

本文记录了作者在 Mac OS X 系统下使用 Terminal 编译 Objective-C 程序的过程及遇到的问题。通过多次尝试,最终解决了因未正确链接 Foundation 框架导致的编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看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包含进来才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值