本来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.o
ld: symbol(s) not found
collect2: 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$ ls
hello.m hello.o
Alex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc hello.o
Undefined symbols:
"___CFConstantStringClassReference", referenced from:
cfstring=hello, objective-c! in hello.o
"_NSLog", referenced from:
_main in hello.o
ld: symbol(s) not found
collect2: 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 -lobjc
Undefined symbols:
"___CFConstantStringClassReference", referenced from:
cfstring=hello, objective-c! in hello.o
"_NSLog", referenced from:
_main in hello.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
奶奶地,不行呀,难道是gcc找不到库?加个路径试试:
Alex-Chens-MacBook-Pro:work_area_sandbox achen$ gcc hello.o -lobjc -L/usr/lib
Undefined symbols:
"___CFConstantStringClassReference", referenced from:
cfstring=hello, objective-c! in hello.o
"_NSLog", referenced from:
_main in hello.o
ld: symbol(s) not found
collect2: 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$ ls
a.out hello.m
Alex-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程序: 将上述代码保存为main.m文件。 打开Xcode并创建一个新的命令行工具项目。 将main.m文件添加到项目中。 确保项目设置正确无误,特别是编译器和链接器设置。 构建并运行项目。Xcode将...
2.1 编译并运行程序 2.1.1 使用Xcode 2.1.2 使用Terminal 2.2 解释第一个程序 2.3 显示变量的值 2.4 小结 2.5 练习 第3章 类、对象和方法 3.1 到底什么是对象 3.2 实例和方法 3.3 用于处理分数的Objective-C类 3.4 ...
此外,Objective-C也是为苹果iOS和OS X系统编写程序的语言,它能够编译和构建命令行功能、GUI以及领域框架。 Objective-C支持类、对象、继承、封装、多态等面向对象的特性,同时它还具有动态运行时特性,可以在运行...
首先,运行“make”编译程序。 接下来,将密文存储在程序可访问的文件中。 通过键入 './crack [filepath] 运行程序 破解过程可能需要 5 秒到 5 分钟,具体取决于文本的长度以及明文在英语中的代表性(破解 '...
jazzy是一个命令行实用程序,可为Swift或Objective-C生成文档 关于 Swift和Objective-C项目均受支持。 与解析源文件不同, jazzy钩接到和以使用代码的表示及其注释来获得更准确的结果。 输出与WWDC 2014之后的苹果...
Xcode的Ice Builder Ice Builder for Xcode是一个命令行程序,可帮助将Slice文件编译为Xcode中的C ++或Objective-C。 它支持所有最新版本的Xcode。安装自制酒通过运行以下命令,使用Homebrew安装Ice Builder for ...
jazzy是一个命令行实用程序,可为Swift或Objective-C生成文档关于Swift和Objective-C项目均受支持。相反,解析您的源文件, jazzy挂接到和使用代码及其对更准确的结果意见的代表。输出与WWDC 2014之后的Apple官方...
它是一款UNIX平台的调试器(debugger),可用于为C, C++, Objective-C, Java, Fortran等程序debug。 在gdb中,你可以通过设置断点(break point)来控制程序运行的进度,并查看断点时的变量和函数调用状况,从而...
iOS BuildKit BuildKit是用于自动化iOS项目构建的模块化命令行界面。 BuildKit旨在减轻您配置连续集成环境和... 它与带有Objective-C和Swift项目的iOS7和iOS8 SDK兼容。 版本:0.0.6 依存关系 Ruby> 2.0 :BuildKit
它是用Objective-C编写的,并且可以在OS X 10.6或更高版本上运行。 有关更多信息,请参见cliclick概述cliclick(“命令行界面单击”的简称)是一种用于从外壳程序/终端执行与鼠标和键盘相关的操作的工具。 它是用...
它是用Objective-C编写的,并且可以在OS X 10.9或更高版本上运行。 有关更多信息或下载已编译的二进制文件,请查看 作者:CarstenBlüm,网站: 用法 为了快速获得第一印象,这是调用cliclick -h时得到的: ...
GCC,全称The GNU Compiler Collection,包含了 C, C++, Objective-C, Fortran, Ada, Go等语言的编译器前端以及这些语言所依赖的一些库文件。虽然现在的IDE基本可以搞定很多编译的事情,但是很多时候,b比如我们看...
该程序可对反汇编的仅运行AppleScript进行进一步的反编译和解码。 对于输入,请使用文本文件,该文件是的输出 运行该程序将根据输入文件创建一个新文件,并带有以下注释: AEVT代码及其易于理解的描述; 解码后...
传感器标签工具从 TI ...如何使用用 Xcode 编译运行二进制文件它将连接到它找到的第一个 SensorTag。 确保按下侧边按钮以使标签广播。注意事项目前仅支持按键操作。 只连接到它看到的第一个 SensorTag执照麻省理工学院
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO ...