`
zzysh
  • 浏览: 53964 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Objective-C:GCC+GNUstep配置

    博客分类:
  • mac
阅读更多

俗话说,“工欲善其事,必先利其器”,所以学习Objective-C的第一件事就是配置Objective-C下面的开发环境。有苹果机的幸福在 于,可以很方便的在XCode下面写Objective-C的程序。可惜的是不能整天带着我的大熊猫到处跑,所以也有必要在windows系统下面配置一 个环境方便学习。我们都是被IDE惯坏的孩子,本以为可以很方便做的事情(我是说配置环境),没想到居然花了两天时间来琢磨怎么搞这个事情那个,顺便又复 习了一C语言的编译过程。

安装

在windows下面想要安装一个GNUstep的环境其实是很简单的一件事情。不过说实话,GNUstep.org上面的文档还真的是很乱。我为此还安装了Cygwin和MinGW。事实上这些都不用安装,只需要在这里 找到windows installer 就 可以了。下载下来的文件有两个,一个是GNUstep System,其实就是MinGW和MSYS,一个是GNUstep Core,这才是我们需要GNUstep相关的东西。安装很简单,就是windows下面的标准安装程序。装完后,在开始菜单里面,有一个GNUstep 的菜单,点击shell就可以进入MSYS交互环境了。

第一个程序

先让我们来点有成就感的事情。新建一个文件main.m

> vim main.m

(在你的GNUstep安装目录下面的home\<username>文件夹里面,比如我的是C:\GNUstep\home\stelee\ 就会生成一个main.m文件)

添加如下内容

#import <stdio.h>
    int main(int argc,const char *argv[]){
    printf(”hello world\n”);
    return 0;
}
 

 

然后运行gcc main.m

你就会发现在同一个目录下面有一个a.exe

在shell环境下执行 ./a.exe就可以看到正确的输出了。是不是很简单?基本上来说,这个第一个文件虽然是以m结尾的,但是确是一个标准的C语言程序,所以我们可以没有任何障碍的编译执行。那么一个“真正”意义上的objective-c程序呢?

给你一点挫折

我们修改一下main.m程序

#import <Foundation/Foundation.h>

int main(int argc, char**argv)

{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSLog(@”headfile dir is ok\n”);

[pool release];

return 0;

}
 

这个程序我们使用了Objective-C的Foundation库。再执行

gcc main.m

main.m:1:34: Foundation/Foundation.h: No such file or directory
main.m: In function `main’:
main.m:7: error: `NSAutoreleasePool’ undeclared (first use in this function)
main.m:7: error: (Each undeclared identifier is reported only once
main.m:7: error: for each function it appears in.)
main.m:7: error: `pool’ undeclared (first use in this function)
main.m:11: error: cannot find interface declaration for `NXConstantString’

Step by step慢慢解决

好像是库文件找不到。这个没问题,我们添加一个库文件,同时我们分开执行编译和链接,看看都发生了什么事情

gcc -c main.m -I /GNUstep/System/Library/Headers

main.m:11: error: cannot find interface declaration for `NXConstantString’

在代码中,我们使用了@”headfile dir is ok\n”,看来需要为编译器制定默认的Constant String类型,别忘了,这是C语言嘛

gcc -fconstant-string-class=NSConstantString -c main.m -I /GNUstep/System/Library/Headers
 

 

好像编译成功了,我们的目录下面有一个main.o文件。

下面链接这个文件

gcc -o main main.o

main.o:main.m:(.text+0×33): undefined reference to `objc_get_class’
main.o:main.m:(.text+0×45): undefined reference to `objc_msg_lookup’
main.o:main.m:(.text+0×64): undefined reference to `objc_msg_lookup’
main.o:main.m:(.text+0×80): undefined reference to `NSLog’
main.o:main.m:(.text+0×93): undefined reference to `objc_msg_lookup’
main.o:main.m:(.text+0xbc): undefined reference to `__objc_exec_class’
main.o:main.m:(.data+0×74): undefined reference to `__objc_class_name_NSAutorele
asePool’
main.o:main.m:(.data+0×78): undefined reference to `__objc_class_name_NSConstant
String’
collect2: ld returned 1 exit status

光有头文件,没有执行的链接库怎么行呢,于是我们得到了最终的命令:

gcc -o main main.o -L /GNUstep/System/Library/Libraries/ -lobjc -lgnustep-base
 

最终得到了我们想要的main.exe

赶紧执行一下./main.exe看看效果吧

在后续的文章中我将介绍怎么写makefile和怎么使用ruby来构建自动化编译过程。不过现在我可以快速的开始我的objective-c的学习了!

 

分享到:
评论
2 楼 qq460701191 2013-10-19  
我邮箱:460701191@qq.com谢谢
1 楼 qq460701191 2013-10-19  
请问一个那个库文件要怎么添加

相关推荐

    windows 下搭建 Objective-C 开发环境

    总结来说,在Windows系统下搭建Objective-C开发环境虽然不像在Mac OS X上那样直接便捷,但通过使用GNUstep等工具,我们依然可以实现在Windows系统下的Objective-C开发。希望这份详细的指南能够帮助那些需要或希望在...

    Objective-C基础教程(入门教程).pdf

    25. GCC编译器:GCC是Objective-C的官方编译器,它支持Objective-C以及C/C++的编译。 26. 打印输出:在Objective-C程序中,通常使用printf函数来进行标准输出,这与C语言中的做法相同。 27. 变量作用域(Variable ...

    windows平台搭建Objective-C环境

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

    Windows7下编译运行Objective-C

    然而,描述中提到的GNUstep项目使得Objective-C的使用范围扩展到了非苹果平台,包括Windows操作系统。在这个场景下,我们关注的是如何在Windows 7环境下编译和运行Objective-C代码。 GNUstep是一个开源项目,它的...

    CodeBlocks&GNUstep开发环境配置 Objective-C编译器

    CodeBlocks和GNUstep是两种广泛使用的开源开发工具,它们在Objective-C编程中扮演着重要的角色。Objective-C是一种面向对象的编程语言,它是苹果生态系统,包括iOS和macOS开发的基础。本篇文章将详细介绍如何配置和...

    Windows下的Objective-C集成开发环境的搭建

    尽管它主要与苹果的Xcode IDE紧密关联,但在Windows环境下,我们同样可以通过配置其他工具来搭建Objective-C的开发环境。本文将详细介绍如何在Windows上使用Codeblocks作为IDE来搭建Objective-C的开发环境。 首先,...

    Objective-C 的简要介绍.docx

    - **跨平台开发**:除了在Apple的生态系统中广泛应用之外,Objective-C还可以用于GNUstep等其他遵循OpenStep标准的平台上的开发工作,这使得Objective-C具有一定的跨平台能力。 #### 四、Objective-C 的编译与执行 ...

    Win10利用CodeBlocks搭建Objective-C开发环境(一).pdf

    2. **GNUstep编译器**:GNUstep是一套用于开发Objective-C应用程序的框架和工具集合,它能够提供类似于苹果Cocoa框架的功能。 - **注意事项**:安装时需要确保按照1、2、3的顺序进行,并且建议使用管理员权限安装,...

    Windows下配置Objective-C编译运行环境

    在Windows系统上配置Objective-C的编译运行环境可能比在Mac上更为复杂,因为Objective-C主要是为Apple的iOS和macOS平台设计的。不过,通过一些工具和步骤,你可以在Windows上搭建一个基本的环境来学习和实验...

    Objective-C的语法与Cocoa框架

    3. **创建和编译 Objective-C 代码**:使用 vi 或其他编辑器创建 Objective-C 文件,然后通过 GCC 编译器进行编译。编译命令如下: ```bash gcc -o hello.exe hello.m \ -I /GNUstep/System/Library/Headers \ -...

    windows下Objective-C开发步骤

    GCC包含了Objective-C的编译器`gcc`,用于将源代码转换为可执行文件。 2. **GNUStep**:这是一个开源项目,目标是实现Apple的Cocoa框架,提供Objective-C的跨平台开发环境。在Windows上,GNUStep提供了编译器、库和...

    Windows XP 系统下创建 Objective-C 集成开发环境

    本文旨在详细介绍如何在 Windows XP 操作系统中搭建一套基于 GNUstep 和 CodeBlocks 的 Objective-C 集成开发环境(IDE)。该环境对于希望在 Windows 平台上进行 Objective-C 应用程序开发的开发者来说非常实用。 #...

    Windows下进行Objective-c开发.docx

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

    Object-C中文版

    - **开源**:Objective-C的编译器是基于GCC的,因此可以在多种平台上进行编译和运行。 #### 二、环境搭建 **Linux/FreeBSD**: - 安装**GNUStep**,通过执行`/usr/GNUstep/System/Makefiles/GNUstep.sh`脚本来设置...

    GNUstep OC编译学习工具包

    GNUstep OC 编译学习工具包是一套专为Windows用户设计的编程工具,旨在帮助开发者在Windows环境下编译和学习Objective-C(OC)程序。Objective-C是苹果公司开发的面向对象编程语言,广泛用于iOS和macOS应用开发。...

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

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

    WINDOW平台下安装object-c运行环境

    在Windows平台上进行Objective-C开发可能比在传统的Mac OS X环境下要复杂一些,但通过使用GNUstep,一个开源的Objective-C环境,我们可以在Windows上搭建起一个基本的开发环境。这篇文章将详细讲解如何在Windows上...

    Objective-C中文.part2

    Objective-C可以在gcc運作的系統寫和編譯,因為gcc含Objective-C的編譯器。 Objective-C是非常「實際」的語言。它使用一個用C寫成、很小的运行库,只會令應用程式的大小增加很小,和大部分OO系統使用極大的VM執行...

Global site tag (gtag.js) - Google Analytics