本来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程序的步骤大致如下: 1. 创建一个新的Objective-C源文件(`.m`),并在其中写入代码。Objective-C的源文件通常会有一个对应的头文件(`.h`)来声明接口。 2. 使用Makefile或者IDE的构建工具...
5. **运行Objective-C程序**:在命令行界面中输入`./helloworld.exe`来运行编译好的程序,可以看到控制台输出“Hello World!”。 #### 提高效率的方法 对于频繁编译的场景,可以考虑使用脚本来简化编译过程。具体...
编译和运行Objective-C程序: 将上述代码保存为main.m文件。 打开Xcode并创建一个新的命令行工具项目。 将main.m文件添加到项目中。 确保项目设置正确无误,特别是编译器和链接器设置。 构建并运行项目。Xcode将...
Objective-C 是一种强大的、基于 C 语言的面向对象编程语言,主要用于开发苹果平台上的应用程序,包括 Mac OS X 和 iOS。它的语法在 C 语言的基础上扩展,添加了面向对象特性,如类、消息传递等。 1. **Objective-C...
要编译和运行Objective-C程序,需要使用Objective-C编译器。在大多数情况下,使用的是Apple LLVM编译器。下面是一个典型的编译和运行步骤: 1. **保存文件**:首先将上述代码保存为一个`.m`文件,例如`HelloWorld.m...
在Windows平台上搭建Objective-C开发环境是一项相对复杂但可行的任务,主要依赖于GNUstep项目,它是一个开源实现的Objective-C环境,旨在提供与Apple的Mac OS X上的Cocoa类似的功能。以下是一个详细的步骤指南: 1....
无论是创建简单的命令行工具还是复杂的图形界面应用程序,Objective-C都能提供强大的支持。随着不断深入学习和实践,开发者将能够掌握更多高级特性和技术,进一步提高开发效率和应用程序的质量。
现在你已经准备好了编辑、编译和运行Objective-C程序的环境。在Code::Blocks中创建一个新的Objective-C源文件,写入你的代码,然后点击"Build and Run"进行测试。 通过以上步骤,你将在Windows上成功搭建了一个...
Frida 提供了对 Objective-C 的支持,通过它的 API 可以在运行时找到并修改 Objective-C 的消息传递机制。在 Objective-C 中,对象之间的通信是通过消息传递实现的,即发送一个消息给对象,对象则会根据消息执行相应...
介绍如何从命令行和Xcode中设置Objective-C应用程序。包括编码命令行Mac桌面应用程序和iOS应用程序的方法。 - **第2章:处理字符串和数字** 讨论如何在Objective-C中操作文本和数值,涉及字符串格式化、数字转换...
然而,通过使用GNUstep,一个开源的Objective-C框架,开发者可以在Windows上构建和运行Objective-C代码。下面将详细介绍如何在Windows下设置Objective-C的开发环境,并编写并运行一个简单的“Hello, World!”程序。 ...
- **Xcode**:Xcode是Objective-C开发的主要集成开发环境(IDE),包含了编写、编译和调试Objective-C程序所需的所有工具。 - **模拟器与真机测试**:为了确保应用程序的质量,本书还介绍了如何使用模拟器进行初步...
Objective-C是在C语言的基础上添加了面向对象的特性,使得它可以作为一种类C语言来使用。Objective-C与C++类似,但采用了不同的语法实现面向对象编程。 #### 二、Objective-C的基本语法 ##### 1. 类定义 ...
Mach-O(Mach Object)是Apple操作系统中用于执行代码的二进制文件格式,包含了编译后的Objective-C类、函数和其他机器可执行的数据。当我们需要从Mach-O文件中提取Objective-C头文件(.h文件)时,通常是为了理解或...
然而,通过使用特定的工具库和编译环境,开发者可以在Windows上构建和运行Objective-C代码。本文将重点介绍如何在Windows上设置和使用这些工具。 标题“WINDOWS编译Objective C的工具库(二)”表明这是一个系列...