rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » ObjC

搭建Linux的Objective-C开发环境

通过GNUstep开发框架,在Linux下也可以搭建Objective-C的开发环境,开发好的程序可以直接在Linux下运行,如果动态库配置环境与Linux相同,程序甚至可以直接在Mac OS X下运行。如果不能直接运行,只要将源代码在苹果机上用XCode再编译一次便可以了。目前GNUstep的Foundation和AppKit类库与苹果的Cocoa的Foundation、AppKit是完全相同的,因为事实上GNUstep源于NEXTSTEP,是Jobs贡献了一把!所以利用GNUstep可以写Mac OS X程序,但iPhone开发估计是不行的。

自已搞了两天,找出了安装中用到的所有环境变量,因而总结出下面最快捷的安装过程,但不保证别的机器上也这么顺利,因为各人的Linux配置可能各异,缺这个少那个在Linux下太常见了,根据提示缺什么就补什么好了,当然,GCC是少不了的。好,开始:

-------------------------------------

在vi /etc/profile最末尾输入下列内容,然后重登录并用set | more命令查看下列变量设置是否生效

GNUSTEP_MAKEFILES=/usr/GNUstep/System/Library/Makefiles/
LD_LIBRARY_PATH=/usr/local/lib/:/usr/GNUstep/Local/Library/Libraries/:/usr/GNUstep/System/Library/Libraries/
LIBRARY_PATH=/usr/local/lib/:/usr/GNUstep/Local/Library/Libraries/:/usr/GNUstep/System/Library/Libraries/
OBJC_INCLUDE_PATH=/usr/GNUstep/Local/Library/Headers/:/usr/GNUstep/System/Library/Headers/
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
PATH=$PATH:/usr/GNUstep/Local/Tools/:/usr/GNUstep/System/Tools/
LC_TIME=CST
LC_CTYPE=CST.utf8

export GNUSTEP_MAKEFILES LD_LIBRARY_PATH LIBRARY_PATH OBJC_INCLUDE_PATH PKG_CONFIG_PATH PATH LC_TIME LC_CTYPE

安装顺序:
libffi-3.0.1 //消息通信
pixman-0.12.0 //cairo安装必选件
cairo-1.8.4   //gnustep-back安装的必选件
gnustep-startup-0.23.0 //Foundation、AppKit类库、GUI back环境
gorm-1.2.10 //控件设计面板程序,相当于XCode中的IB
ProjectCenter-0.5.0 // IDE
gnustep-examples-1.2.0 //GUI示例程序
---------
ftp://sourceware.org/pub/libffi/libffi-3.0.1.tar.gz
tar xzvf ./libffi-3.0.1.tar.gz

cd libffi-3.0.1
./configure
make
make install
--------------
http://cairographics.org/releases/pixman-0.12.0.tar.gz
tar xzvf ./pixman-0.12.0.tar.gz

cd pixman-0.12.0
./configure
make
make install
-----------------
http://cairographics.org/releases/cairo-1.8.4.tar.gz
tar xzvf ./cairo-1.8.4.tar.gz

cd cairo-1.8.4
./configure
make
make install
----------------
ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-startup-0.23.0.tar.gz
tar xzvf ./gnustep-startup-0.23.0.tar.gz

cd gnustep-startup-0.23.0
./configure
make  //后面的选项一路按回车即可

chmod +x /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
-----------------
http://ftpmain.gnustep.org/pub/gnustep/dev-apps/gorm-1.2.10.tar.gz
tar xzvf ./gorm-1.2.10.tar.gz

cd gorm-1.2.10
make
make install
---------------
http://ftpmain.gnustep.org/pub/gnustep/dev-apps/ProjectCenter-0.5.0.tar.gz
tar xzvf ./ProjectCenter-0.5.0.tar.gz

cd ProjectCenter-0.5.0
make
make install ---------------
测试Foundation基础类库程序

vi prog1.m #import <Foundation/Foundation.h>   int main(int argc,char **argv)   {   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];   NSLog(@"Everything is OK ! \n");   [pool release]; return 0;   } 编译与运行

gcc -c prog1.m -fconstant-string-class=NSConstantString
gcc -o prog1 prog1.o -lobjc -lgnustep-base
./prog1

显示结果 [root@RFDC ~]# ./prog1
2010-02-09 12:27:07.683 prog1[28450] Unknown time zone name `CST'.
2010-02-09 12:27:07.685 prog1[28450] Using time zone with absolute offset 0.
2010-02-09 12:27:07.681 prog1[28450] Everything is OK !
[root@RFDC ~]#
----------------

搭建Linux的Objective-C开发环境

如果程序是在Linux本地运行,可以运行正常,通过ssh或Xwindow中运行,有时会提示下列错误:

./prog1: Uncaught exception NSInvalidArgumentException, reason: Tried to add nil value for key 'NSCurrencySymbol' to dictionary

这是由于Objective-C默认输出包含时间信息,所以要在环境变量中设置相关的时区信息才可运行。即修改/etc/profile中的下列两项设置与本地运行时提示的“Unknow time zone name 'CST' ”里的CST时区,各人平台不同可以根据本地运行的结果作相应的修改,比如时区显示是en_US,就用en_US代替下面的CST:

-------------------------

vi /etc/profile

LC_TIME=CST
export LC_TIME

LC_CTYPE=CST.utf8
export LC_CTYPE

------------------

配置好了,重登录,再运行程序就正常了:

搭建Linux的Objective-C开发环境

------------

启动IDE和IB(控件设计器)

startx //启动Xwindow,只能在Linux本地运行,不能通过ssh
openapp ProjectCenter &

搭建Linux的Objective-C开发环境
openapp Gorm &

搭建Linux的Objective-C开发环境 ---------------

测试AppKit图形类库程序

http://ftp.gnustep.org/pub/gnustep/core/gnustep-examples-1.2.0.tar.gz
tar xzvf gnustep-examples-1.2.0.tar.gz

startx //启动Xwindow,只能在Linux本地运行,不能通过ssh
cd gnustep-examples-1.2.0/gui

选择要测试的程序,编译后运行即可,如
cd Calculator
make
openapp ./Calculator.app &

搭建Linux的Objective-C开发环境

找到以前在苹果本本上测试过的程序,不用改任何代码,直接编译运行就OK了!

搭建Linux的Objective-C开发环境

Everything is OK !!

----------------------

BTW:

1)可以创建一个build.sh脚本来自动完成编译任务

[root@RFDC ~]# more ./build.sh
gcc -c ${1}.m -fconstant-string-class=NSConstantString
gcc -o $1 ${1}.o -lobjc -lgnustep-base
[root@RFDC ~]# chmod +x ./build.sh
[root@RFDC ~]# ./build.sh prog3
[root@RFDC ~]#

2)多文件编译

gcc file1.m file2.m main.m -o main -fconstant-string-class=NSConstantString -lobjc -lgnustep-base

其中file1.m与file2.m对应的头文件.h中必须要有一行:

#import <Foundation/Foundation.h>

所有.m文件中必须包含对应的.h头文件,如main.m:

#import "file1.h"

#import "file2.h"

3)gnustep尚不支持@property、@synthesize编译器指令

4)gnustep不支持obj.property取值,只能实现getter方法后采用[obj property]的方式取值

顶一下
(0)
踩一下
(0)