`
alexgreenbar
  • 浏览: 87641 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

命令行编译运行Objective-C程序

    博客分类:
  • Mac
阅读更多

本来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”例子的重要性,当你成功编译运行了它,语言对你来说就剩下语法和应用了。

 

 

 

 

 

 

 

 

 

1
0
分享到:
评论

相关推荐

    Windows7下编译运行Objective-C

    编译和运行Objective-C程序的步骤大致如下: 1. 创建一个新的Objective-C源文件(`.m`),并在其中写入代码。Objective-C的源文件通常会有一个对应的头文件(`.h`)来声明接口。 2. 使用Makefile或者IDE的构建工具...

    windows 下搭建 Objective-C 开发环境

    5. **运行Objective-C程序**:在命令行界面中输入`./helloworld.exe`来运行编译好的程序,可以看到控制台输出“Hello World!”。 #### 提高效率的方法 对于频繁编译的场景,可以考虑使用脚本来简化编译过程。具体...

    一个简单的Objective-C程序示例,它使用Foundation框架来读取用户输入的两个整数,并计算它们的和与乘积

    编译和运行Objective-C程序: 将上述代码保存为main.m文件。 打开Xcode并创建一个新的命令行工具项目。 将main.m文件添加到项目中。 确保项目设置正确无误,特别是编译器和链接器设置。 构建并运行项目。Xcode将...

    学习Objective-C--第一天.doc

    Objective-C 是一种强大的、基于 C 语言的面向对象编程语言,主要用于开发苹果平台上的应用程序,包括 Mac OS X 和 iOS。它的语法在 C 语言的基础上扩展,添加了面向对象特性,如类、消息传递等。 1. **Objective-C...

    Objective-C HelloWorld! 程序案例

    要编译和运行Objective-C程序,需要使用Objective-C编译器。在大多数情况下,使用的是Apple LLVM编译器。下面是一个典型的编译和运行步骤: 1. **保存文件**:首先将上述代码保存为一个`.m`文件,例如`HelloWorld.m...

    windows平台搭建Objective-C环境

    在Windows平台上搭建Objective-C开发环境是一项相对复杂但可行的任务,主要依赖于GNUstep项目,它是一个开源实现的Objective-C环境,旨在提供与Apple的Mac OS X上的Cocoa类似的功能。以下是一个详细的步骤指南: 1....

    基于Objective-C的软件开发方法探讨

    无论是创建简单的命令行工具还是复杂的图形界面应用程序,Objective-C都能提供强大的支持。随着不断深入学习和实践,开发者将能够掌握更多高级特性和技术,进一步提高开发效率和应用程序的质量。

    Windows下的Objective-C集成开发环境(IDE)的搭建 (一)

    现在你已经准备好了编辑、编译和运行Objective-C程序的环境。在Code::Blocks中创建一个新的Objective-C源文件,写入你的代码,然后点击"Build and Run"进行测试。 通过以上步骤,你将在Windows上成功搭建了一个...

    011.基于 Frida 框架的 Objective-C 插桩方法 Objective-C Instrumentation wi

    Frida 提供了对 Objective-C 的支持,通过它的 API 可以在运行时找到并修改 Objective-C 的消息传递机制。在 Objective-C 中,对象之间的通信是通过消息传递实现的,即发送一个消息给对象,对象则会根据消息执行相应...

    Objective-C Recipes - A Problem-Solution Approach

    介绍如何从命令行和Xcode中设置Objective-C应用程序。包括编码命令行Mac桌面应用程序和iOS应用程序的方法。 - **第2章:处理字符串和数字** 讨论如何在Objective-C中操作文本和数值,涉及字符串格式化、数字转换...

    Windows下进行Objective-c开发.docx

    然而,通过使用GNUstep,一个开源的Objective-C框架,开发者可以在Windows上构建和运行Objective-C代码。下面将详细介绍如何在Windows下设置Objective-C的开发环境,并编写并运行一个简单的“Hello, World!”程序。 ...

    objective-c 编程(第3版)

    - **Xcode**:Xcode是Objective-C开发的主要集成开发环境(IDE),包含了编写、编译和调试Objective-C程序所需的所有工具。 - **模拟器与真机测试**:为了确保应用程序的质量,本书还介绍了如何使用模拟器进行初步...

    Objective-C的语法与Cocoa框架.pdf

    Objective-C是在C语言的基础上添加了面向对象的特性,使得它可以作为一种类C语言来使用。Objective-C与C++类似,但采用了不同的语法实现面向对象编程。 #### 二、Objective-C的基本语法 ##### 1. 类定义 ...

    Generate Objective-C headers from Mach-O files..zip

    Mach-O(Mach Object)是Apple操作系统中用于执行代码的二进制文件格式,包含了编译后的Objective-C类、函数和其他机器可执行的数据。当我们需要从Mach-O文件中提取Objective-C头文件(.h文件)时,通常是为了理解或...

    WINDOWS编译object c 的工具库(二)

    然而,通过使用特定的工具库和编译环境,开发者可以在Windows上构建和运行Objective-C代码。本文将重点介绍如何在Windows上设置和使用这些工具。 标题“WINDOWS编译Objective C的工具库(二)”表明这是一个系列...

Global site tag (gtag.js) - Google Analytics