因为一时心血来潮, 早上起床打开电脑后,给自己下了个任务, 搞定linux 下 object c 环境安装。
很自然的, 我搜索了下google, 找到了一篇文章《感谢老王的:Object-C之Windows版Hello, World!》,
这篇文章虽然是将如何在 windows 下面建立 object c 开发环境的, 我自己想,linux 比 windows 更接近于
mac, 在 linux 下面安装 object c 开发环境, 应该也很容易,于是开始动手了。
在 windows 下面, 需要用到 GNUstep, 那么, 在 linux 下面应该也是必不可少的,安装这种思维,我决定首先安装 GNUstep.
1. 安装 gnustep
搜先,搜索 gnustep 软件包
apt-cache search gnustep
一下子, linux 列出了很多相关的软件包,而且有一个的名字正好就是 gnustep,好不犹豫的, 我敲下了下面的命令
apt-get install gnustep
由于显示有一些缺失的东西没有安装,需要对系统更新一下,我于是先更新系统了。
apt-get update
在接下来, 我运行 apt-get install gnustep 时, 就没有任何问题了, 安装成功。
2.
接下来, 需要测试开发环境是否安装成功了。 我用文本编辑器, 敲下了 helloworld.m 的代码,如下:
#import <Foundation/Foundation.h>ai
int main (int argc
, c
onst c
har *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc
] init];
NSLog(@"Hello World!");
[pool drain];
return 0;
}
接下来, 我敲了下面的命令
gcc -o helloworld helloworld.m -fconstant-string-class=NSConstantString
显示下面的错误
gcc-4.2: error trying to exec 'cc1obj': execvp: No such file or directory
直觉告诉我, cc1obj 缺失, 我于是敲
which cc1obj
显示这个命令并不存在。
而 apt-cache search cc1obj, 依旧一无所获。
于是,我再次求助 google, 关键词是 cc1obj(我人比较懒,所以,都是能少敲一点就少敲了)
最后发现了一个链接 http://kubuntuforums.net/forums/index.php?topic=3098338.0
找到了解决方案,原来是有一个叫做 gobjc 的没有安装。我于是敲了下面的命令
apt-get install gobjc
接下来,继续编译
显示错误信息为
helloworld.m:1:34: Foundation/Foundation.h: No such file or directory
很明显, 头文件找不到,
我于是搜索,看本地是否有这个文件
find / -name Foundation.h
没有任何结果显示出来
直觉告诉我, gnustep 的头文件没有包含进来
我于是敲 apt-cache search gnustep
发现里边列出的软件有这么一个, 也就是 gnustep-devel
这个应该是我需要安装的。
我于是敲了下面的命令
apt-get install gnustep-devel
接下来, 我输入 find / -name Foundation.h
显示 /usr/include/GNUstep/Foundation/Foundation.h
呵呵, 搞定。
由于 Foundation.h 头文件是在 GNUstep 下面的, 因此编译的时候, 必须包含搜索头文件里,我敲了下面的命令
gcc -o -I /usr/include/GNUstep helloworld helloworld.m -fconstant-string-class=NSConstantString
依旧存在错误,信息提示是有一些库没有链接进来, 导致一些函数没有实现。
我查看了最开始的那篇文章, 上面的解决方案是包含库 objc 和 gnustep-base
find / -name libobjc.a
显示 /usr/lib/gcc/i486-linux-gnu/4.3/libobjc.a
find / -name libgnustep-base.a
显示 /usr/lib/libgnustep-base.a
直觉告诉我, 这两个库都在 linux 库径中, 因此, 只需要直接将这两个库编译进去就可以了。
我于是敲了下面的命令
gcc -o -I /usr/include/GNUstep helloworld helloworld.m -fconstant-string-class=NSConstantString -lobjc -lgnustep-base
这次编译, 就没有任何错误了。
接下来, 我敲了下面的命令:
./helloworld
显示 2010-08-21 04:25:16.083 helloworld[5627] Hello World!
运行成功
也就是说, 第一个 object-c 程序搞定了。
总结:
在 linux 下面开发运行objec-c 程序, 需要安装的软件包括:
gnustep, gnustep-devel, gobjc
在编译的时候, 需要将 gnustep 的头文件路径 /usr/include/GNUstep 包含进去, 同时需要包含这么一句 -fconstant-string-class=NSConstantString, 在生产可执行文件的时候, 需要包含库 objc 和 gnustep-base.