Windows 下使用 GNUstep 编译并运行 Objective-C 程序

98 篇文章 0 订阅
70 篇文章 0 订阅

今晚上开始看《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 cd /home
2 mkdir app1
3 cd app1
这个 app1 的目录位于磁盘上的 D:\GNUstep\msys\1.0\home\app1 目录下。

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

01 #import <Foundation/Foundation.h>
02  
03 int main (int argc, const char *argv[]) {
04     //@autoreleasepool {
05     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
06     NSLog(@"Hello oschina");
07     [pool drain];
08     //}
09     return 0;
10 }
说明:由于 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:

01 #import "Calculate.h"
02  
03 int main(int argc, char *argv[])
04 {
05     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
06     Calculate *cal = [[Calculate alloc] init];
07     int v = 5;
08     int av = 10;
09     [cal setNum: v];
10     [cal add: av];
11     NSLog(@"%i + %i = %i\n", v, av, [cal num]);
12     [pool drain];
13     return 0;
14 }
Calculate.h:
01 //Calculate.h
02 #import <Foundation/Foundation.h>
03  
04 @interface Calculate : NSObject
05 {
06     @private int num;
07 }
08  
09 -(int) num;
10  
11 -(void) setNum: (int) n;
12  
13 -(void) add: (int) n;
14  
15 @end
Calculate.m:
01 #import "Calculate.h"
02  
03 @implementation Calculate
04  
05 -(int) num
06 {
07     return num;
08 }
09  
10 -(void) setNum: (int) n
11 {
12     num = n;
13 }
14  
15 -(void) add: (int) n
16 {
17     num += n;
18 }
19  
20 @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 编译器,不知道如何搞定!


转自:http://www.oschina.net/question/12_80298?from=20121125

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值