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

今晚上开始看《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 编译器,不知道如何搞定!

红薯
发帖于 3年前
20回/11391阅

标签: GNUstep Objective-C GCC

0收藏(34)

按默认排序  显示最新评论

时间: 2024-10-01 04:02:02

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

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-src(hadoop-2.2.0-src.tar.gz) 3.JDK 1.7 4.Maven 3.2.1(apache-maven-3.2.1-bin.zip) 5.Protocol Buffers 2.5.0 6.Unix command-line tool Cygwin(Setup-x86.e

windows下用vs2010编译ffmpeg

转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg是一个开源的多媒体库,使用非常广泛.在linux下编译ffmpeg非常简单,而在Windows下编译就不是那么容易了.一般在windows下使用MinGW的gcc toolchain进行编译,这样的话,因为ffmpeg的导出函数均是C风格,因而gcc编译的lib可以被vs链接.但是gcc的debug

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

转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言开发的,不可避免的,libav源码使用了一些gcc的特性,那么在Windows下很难使用VC编译,但是使用MinGW编译却简单多了,下面我将根据自己的经历逐步介绍使用MinGW编译libav的过程以及在此过程中遇到的问题及其解决方法. 1      安装MinGW编译环境 1.1    安装MinG

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

Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.willowgarage.com/wiki/InstallGuide 2.在"2) Install Prerequisite Libraries and Tools"中提到了如果想支持Python调用需要Python 2.6或者 2.7版本,而且还需要NumPy和SciPy库.升级Python至2

Windows下从源代码编译Skia

在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. foruok原创.如需转载请关注foruok的微信订阅号"程序视界"联系foruok. CEF编译出的Skia不可单独用 Chromium使用Skia.Windows下从源代码编译CEF说明了怎么编译CEF,它会捎带着编译Chromium.里面有Skia,但它编译出来的skia_library

Windows下用cmake编译Caffe

Windows下用cmake编译Caffe 2018年8月24日 23:35:41 by ChrisZZ 环境说明 系统: Windows10 编译器:Visual Studio 2015 构建器:CMake 3.12 Caffe: BVLC官方Caffe的windows分支 CUDA: 9.2 CuDNN:7.0 终端: cmd窗口 具体步骤 1. 下载代码 进cmd敲: d: cd work git clone https://github.com/BVLC/caffe caffe-BVLC

Windows下如何关闭占用某一端口的程序与服务(转载)

今天使用JBoss服务器,它的端口被占用了,因此总是发生JVM的端口冲突的异常,但我又不知道到底是哪位大仙在这个8080端口上作怪,怎么办呢,下面提供一种简单可行的方法 1. 检测端口是否被占用:(命令行) netstat -an 2. 查看各端口上的服务:(命令行) fport         // 这时我检测到我的8080端口由p2pSvr占用(热狗之类的程序的吧) 注:fport是Windows2000自带的工具,XP上没有,上网下一个就可以 3. 关闭检测到的服务或进程 若是服务,则可:

Windows下通过写注册表的方式实现程序开机自启动

程序可以读取同目录下的config.ini文件中的配置来实现开机自启动. config.ini文件地格式实例如下: [Main] KeyName = test ProcessPath = D:\bin\test.exe 其中KeyName字段为写入注册表的表项名称(可以设置为程序名) ProcessPath为程序的完整路径 程序的完整源代码如下. regedit函数实现注册表写入,autopen实现开机自启动. 编译后的程序在此下载:程序下载 #include <stdio.h> #inclu

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

自:http://blog.csdn.net/neofung/article/details/6574002 Ubuntu上安装和使用SSH  网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条: sudo apt-get install openssh-s