今晚上开始看《Objective-C 程序设计(第4版)》这本书(OSChina 正在做此书的书评活动,详情请看这里),到现在为止看到第 7 章,于是想动手试试写两简单的程序编译跑跑看。

不习惯 Mac,在 Windows 下装了个 GNUstep 也可以玩。

非常简单的几步,你也来试试吧?

1. 下载并安装 GNUstep

下载地址:http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/

有三个文件是必须安装的,分别是:

这里我下载的都是最新的版本,按默认方式将上面三个程序都安装在同一个目录,我用的是 D:\GNUstep 目录。

安装完毕后,打开:开始菜单 -> 所有程序 -> GNUstep -> Shell  就会进入一个类似 Linux 的 Shell 环境,如下图所示:

你可以自行一些简单的 Linux 命令,例如 ls、mkdir 等。

下面我们进入 /home 目录,然后创建一个 app1 的子目录:

1
2
3
cd /home
mkdir app1
cd app1

这个 app1 的目录位于磁盘上的 D:\GNUstep\msys\1.0\home\app1 目录下。

接下来我们写一个简单的程序:

1
2
3
4
5
6
7
8
9
10
#import <Foundation/Foundation.h>
 
int main (int argc, const char *argv[]) {
    //@autoreleasepool {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"Hello oschina");
    [pool drain];
    //}
    return 0;
}

说明:由于 GNUstep 带的 gcc 编译器不支持 Objective-C 2.0 ,因此不支持 @autoreleasepool 这个指令,我将它注释掉了。

然后我们用下面的命令来编译这个程序:

1
$ gcc -o app1 app1.m -I/GNUstep/System/Library/Headers -fconstant-string-class=NSConstantString -L/GNUstep/System/Library/Libraries -lobjc -lgnustep-base

上面这个命令除了 -o 后面的参数你可以更改,其他都必须照写,否则就会出错。

参数说明,如果熟悉Linux/Unix下C/C++编译的话,上述参数应该很熟悉,-I表示头文件查找的路径,-L表示库文件查找 路径,-l表示需要链接的库文件。但是,-fconstant-string-class=NSConstantString  对于这个参数可能比较陌生,这个参数主要是指定常量字符串所使用的class。

编译完就会在当前目录生成一个名为 app1.exe 的可执行程序。

输入 ./app1.exe 命令执行这个程序,执行结果:

2012-11-21 22:04:46.911 app1[4780] Hello oschina

就这么简单!至于代码中每一行的意思大家自己看书吧。

再来一个复杂一点的程序 app2,app2 包含三个文件,分别是:

Main.m:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#import "Calculate.h"
 
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    Calculate *cal = [[Calculate alloc] init];
    int v = 5;
    int av = 10;
    [cal setNum: v];
    [cal add: av];
    NSLog(@"%i + %i = %i\n", v, av, [cal num]);
    [pool drain];
    return 0;
}

Calculate.h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Calculate.h
#import <Foundation/Foundation.h>
 
@interface Calculate : NSObject
{
    @private int num;
}
 
-(int) num;
 
-(void) setNum: (int) n;
 
-(void) add: (int) n;
 
@end

Calculate.m:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#import "Calculate.h"
 
@implementation Calculate
 
-(int) num
{
    return num;
}
 
-(void) setNum: (int) n
{
    num = n;
}
 
-(void) add: (int) n
{
    num += n;
}
 
@end

编译方法更上面一样,只不过需要将两个 .m 文件都加进去:

1
$ gcc -o app2 Main.m Calculate.m -I/GNUstep/System/Library/Headers -fconstant-string-class=NSConstantString -L/GNUstep/System/Library/Libraries -lobjc -lgnustep-base

运行结果: 2012-11-21 22:17:51.207 app2[3144] 5 + 10 = 15

现在的问题是:有没有办法让 GNUstep 支持 Objective-C 2.0 呢?官网上有描述这个问题,需要使用Clang 编译器,不知道如何搞定!

 
 
 

Windows系统中使用GNUstep 编译运行Objective-C程序

(2011-03-07 20:18:09)

标签:

it

 

首先要说明的是:

GNUStep 虽然可以在windows上安装使用但主要还是是面向Linux用户,而非Windows用户。如果有比较好的Linux开发经验,用GNUStep还是不错的。GNUStep的功能并不强,而且只有Foundation库,因此建议大家还是多花时间在 XCode 上比较划算的!

最近学习Objective-C,但是很穷用不起XCode。于是打算用GNUstep环境,命令行编译运行Objective-C文件。但是找了一些网上的教程,比较老了,而且都是相互copy。有些错误的地方都是传来传去。于是打算简单写一下正确的步骤。如果您有更好更简单更正确的方法,也请您留言,我将学习并改正。谢谢!

首先去http://www.gnustep.org/experience/Windows.html官网下载GNUstep的三件套。很多文章都是写的下载两个程序,其实现在GCC在第三个文件里了。仅仅前两个是不行的。

分别是GNUstep MSYS System、GNUstep Core、GNUstep Devel这三个工具。

下载好后安装,一路点击下去就可以了。

然后就可以使用了。程序->GNUstep->Shell。打开后等2秒就可以使用了。

给个例子吧:例如在F盘目录下用文本编辑一个文件Fraction.m,代码如下(最简单的Obj-C程序):

#import <Foundation/Foundation.h>

int main(int argc, char *argv[])  {

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

NSLog(@"Hello world!");

[pool drain];

return 0;

}

首先在Shell输入 cd f:\ 切换到F盘目录,然后

在Shell中输入命令:gcc -fconstant-string-class=NSConstantString -c Fraction.m -I /GNUstep/System/Library/Headers

这是目录里就会生成一个Fraction.o文件。(成功完成此步骤不会有任何显示在命令行中,若有显示说明有错误)

接下来输入命令gcc -o Fraction Fraction.o -L /GNUstep/System/Library/Libraries/ -lobjc -lgnustep-base

此时成功的话就会在目录里生成一个Fraction.exe文件。

最后使用命令 ./Fraction.exe会看到输出的结果,我的结果是:2011-03-07 19:30:33.078 Fraction[4824] Hello world!

成功!

Windows 下使用 GNUstep 编译并运行 Objective-C 程序的更多相关文章

  1. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  2. 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持

    Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...

  3. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  4. windows下用vs2010编译ffmpeg

    转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg ...

  5. Windows下从源代码编译Skia

    在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. fo ...

  6. Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序

    自:http://blog.csdn.net/neofung/article/details/6574002 Ubuntu上安装和使用SSH  网上有很多介绍在Ubuntu下开启SSH服务的文章,但大 ...

  7. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  8. windows下搭建学习objective-c 的运行环境【转载】

    对于Iphone开发学习者而言,Object -c 是必修的语言.但是由于苹果的自我封闭的产业链发展模式(从芯片.机器.开发语言.终端产品.服务)的限制,要想开发针对苹果iPhone等产品的应用程序, ...

  9. Hadoop:Windows 7 32 Bit 编译与运行

    所需工具 1.Windows 7 32 Bit OS(你懂的) 2.Apache Hadoop 2.2.0-bin(hadoop-2.2.0.tar.gz) 3.Apache Hadoop 2.2.0 ...

随机推荐

  1. kvm虚似机监控

    [root@ok Desktop]# yum install virt-top [root@ok Desktop]# virt-top virt-top 22:53:44 - x86_64 4/4CP ...

  2. .net学习笔记---Asp.net的生命周期之二页生命周期

    用户请求 从 用户角度来说,我不管你后台经历了什么,我只想要我请求的页面.请求到服务器端,服务器必须得有所表示的是吧,即使不想搭理人家也得让IIS给人家说声:找不到服务器.请求来到服务器端,肯定要让服 ...

  3. 比较StringBuffer字符串内容是否相等?

    为什么会有这个问题呢?首先得看看String和StringBuffer的比较区别: ==只能比较两个字符串的内存地址是否一样,不能比较字符串内容: String的equals方法因为重写了Object ...

  4. cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建

    一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...

  5. 简单几何(直线与线段相交) POJ 1039 Pipe

    题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...

  6. splice JavaScript Array 对象

    定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 语法 arrayObject.splice(index,howmany,item1, ...

  7. HDU 2653 (记忆化BFS搜索+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2653 题目大意:迷宫中有普通点和陷阱.其中普通点可以走可以飞,但是陷阱只能飞.走耗时1,飞耗时2.但 ...

  8. ubuntu中的Wine详解

    什么是wine?(转自百度百科,具体看百科) wine,是一款优秀的Linux系统平台下的模拟器软件,用来将Windows系统下的软件在Linux系统下稳定运行,该软件更新频繁,日臻完善,可以运行许多 ...

  9. 【BZOJ】2002: [Hnoi2010]Bounce 弹飞绵羊(lct)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 (BZOJ挂了,还没在BZOJ测,先是在wikioi测过了,,) 囧.在军训时立志要学lct! ...

  10. CSS一些总结

    1. display block:块元素,默认宽度为100%,可以设置元素的宽高,默认占满一行.块元素包括div,h1-h6,form,table,ul,ol等: inline:行内元素,默认宽度为内 ...