命令行编译运行Objective-C程序
来源:互联网 发布:数据采集厂家 编辑:程序博客网 时间:2024/04/18 14:01
本来Mac上写Objective-C程序有非常好的XCode集成开发环境可以用,但不幸的是XCode 3.2后不支持Foundation类型的项目类型了,没办法,只好尝试在命令行手工进行。
hello.m 如下:
#import <Foundation/Foundation.h>int main(int argc, const char *argv[]) { NSLog (@"hello, objective-c!"); return 0;}
那用什么编译链接呢?其实Mac本身用的也是gcc suite, gcc支持三种C语言的变种:C/C++/Objective-C。
尝试#1: 用gcc直接编译链接
Alex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc hello.m Undefined symbols: "___CFConstantStringClassReference", referenced from: cfstring=hello, objective-c! in cccGGqYO.o "_NSLog", referenced from: _main in cccGGqYO.old: symbol(s) not foundcollect2: ld returned 1 exit status
出错了,好像是链接的问题,但是第一次写Objective-C程序,语法难道没有问题吗?
尝试#2:用gcc先编译再链接
Alex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc -c hello.m Alex-Chens-MacBook-Pro:work_area_sandbox achen$ lshello.mhello.oAlex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc hello.oUndefined symbols: "___CFConstantStringClassReference", referenced from: cfstring=hello, objective-c! in hello.o "_NSLog", referenced from: _main in hello.old: symbol(s) not foundcollect2: ld returned 1 exit status
哈哈,编译没有问题,看来问题出再链接上,可是该用那个系统库呢,NSLog()对象在那个动态链接库里呢?去/usr/lib里找找:
Alex-Chens-MacBook-Pro:lib achen$ ls libobjc.libobjc.A.dylib libobjc.dylib
嗯,估计是libobjc.dylib,那就链链吧:
Alex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc hello.o -lobjcUndefined symbols: "___CFConstantStringClassReference", referenced from: cfstring=hello, objective-c! in hello.o "_NSLog", referenced from: _main in hello.old: symbol(s) not foundcollect2: ld returned 1 exit status
奶奶地,不行呀,难道是gcc找不到库?加个路径试试:
Alex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc hello.o -lobjc -L/usr/libUndefined symbols: "___CFConstantStringClassReference", referenced from: cfstring=hello, objective-c! in hello.o "_NSLog", referenced from: _main in hello.old: symbol(s) not foundcollect2: ld returned 1 exit status
还是不行,放弃?
尝试#3: man gcc, 找出问题
Alex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc -framework Foundation hello.m Alex-Chens-MacBook-Pro:work_area_sandbox achen$ lsa.outhello.mAlex-Chens-MacBook-Pro:work_area_sandbox achen$ ./a.out 2010-08-11 23:50:51.017 a.out[2476:903] hello, objective-c!Alex-Chens-MacBook-Pro:work_area_sandbox achen$
YES! , 成功了,看来的确和通常的C/C++命令行编译运行有区别。
通过这个过程,又一次深刻体会了经典”hello,world”例子的重要性,当你成功编译运行了它,语言对你来说就剩下语法和应用了。
- 命令行编译运行Objective-C程序
- windows命令行下编译、运行c程序
- 命令行编译iPhone版的Objective-C程序
- Windows系统中使用GNUstep 编译运行Objective-C程序
- 用terminal 编译运行objective-c 程序(上)
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序
- 命令行编译C程序
- 在codeblocks中用命令行(cmd)编译运行C程序
- java 命令行编译运行程序
- 命令行编译运行Java程序
- 命令行编译运行java程序
- iOS clang编译Objective-C程序
- Mac下命令行编译objective-c代码
- 命令行编译C/C++程序
- Clang编译器编译运行Objective-C代码
- 当你疲倦时,当你想放弃时,看看这个吧!
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
- 老友记中Joey特搞笑的几句
- Macbookpro 初印象
- Mac 上软件的安装,卸载和运行
- 命令行编译运行Objective-C程序
- Javascript里的函数调用模式
- 删除CScrollView中滚动条
- Investing in myself: Realizing my value as a programmer
- 老农民的由来
- ora-19809: limit exceeded for recovery files
- Google推DNS服务,IP地址8.8.8.8和8.8.4.4 这IP地址太牛了
- bitnami redmine安装插件code review
- ios UITableView封装之下拉-上提-图片异步加载