在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Objective-C是本人用过的最佳类C、面向对象的编程语言。Objective-C与标准C完美兼容,而在此基础上又加上了将面向对象的基础概念诠释得最好的SmallTalk元素,使得它既简洁、又灵活,绝对是做商业化项目的首先编程语言工具。它跟Java相比更接近底层,你可以直接在里面写内联汇编或直接与汇编文件一起连接(因为它就是C语言,在C语言基础上扩展了SmallTalk的消息机制与OO机制)。与C++相比,它显然又简洁许多,C++里的神马多继承了、虚拟继承了,坑之多数不尽。Objective-C非常容易上手,而且语法也不复杂,所以不会导致程序员出现过于良莠不齐的现象,整个项目维护起来也十分容易。 因此,不管是在Unix/Linux下还是在OS X/iOS下,使用Objective-C编程就是一种享受。下面我将为大家介绍如何在最新版本的 Ubuntu下(14.10)来安装、编译Objective-C。
sudo apt-get install gobjc 接下来,我们主要就是对gnustep库的安装。对OS X或iOS编程过的朋友应该对Foundation库不陌生吧,这个就是在gnustep库里的,如果不装此库,你连NSObject都用不了,呼呼~先安装gnustep sudo apt-get install gnustep 完成之后,我们再安装gnustep-devel sudo apt-get install gnustep-devel
在编译之前,我们进入 /usr/share/GNUstep/Makefiles 目录,来对编译环境进行设置,在当前控制台(terminal)执行: sudo bash /usr/share/GNUstep/Makefiles/GNUstep.sh
#import <Foundation/Foundation.h> int main(void) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello, world!"); unichar c = u'加'; NSLog(@"The character is: %C", c); [pool drain]; }
之后,我们创建一个make文件,命名为:GNUmakefile GNUSTEP_MAKEFILES = /usr/share/GNUstep/Makefiles include $(GNUSTEP_MAKEFILES)/common.make ADDITIONAL_FLAGS += -std=gnu11 TOOL_NAME = test test_OBJC_FILES = main.m include $(GNUSTEP_MAKEFILES)/tool.make 由于我们在源代码中使用了C11标准中才引入的Unicode前缀字面量表达式——u'加',表示一个UTF-16字符,因此我们在GNUmakefile中也加入了-std=gnu11这个编译选项来使得编译器使用最新的C11标准与GNU规范语法扩展。 这里要注意的是,对于其它Linux版本的系统,GNUStep的默认安装路径可能不是在/usr/share/之中,因此需要根据当前GNUStep/Makefiles的路径对GNUSTEP_MAKEFILES进行设置。而且这个变量必须在include之前定义好。 而下面的TOOL_NAME指定了make之后最终的目标可执行文件名。这里命名为test。
http://www.techotopia.com/index.php/Installing_and_Using_GNUstep_and_Objective-C_on_Linux http://www.gnustep.org/resources/documentation/Developer/Base/ProgrammingManual/manual_1.html#SEC11
1、 2、 3、 4、 以上这些变量后面就跟着相应的要编译的源文件名,多个源文件名之间用空格分隔。 其余一些可用的make变量见如下链接:
Objective-C源文件(main.m)如下: #import <Foundation/Foundation.h> extern int __attribute__((fastcall)) MyASMFunc(int a, int b); int main(void) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello, world!"); unichar c = u'加'; NSLog(@"The character is: %C", c); NSLog(@"The value is: %d", MyASMFunc(10, 20)); [pool drain]; } 这里,__attribute__((fastcall))使得MyASMFunc函数的参数与返回值都能通过寄存器进行传递,这样方便汇编过程的实现。 下面是汇编文件(hello.s): .text .align 2 .globl MyASMFunc MyASMFunc: // ECX contains the first parameter // EDX contains the second parameter mov %ecx, %eax add %edx, %eax ret
汇编文件hello.s写完之后,可以先用gcc将其汇编成目标文件hello.o,然后我们可以写GNUmakefile: GNUSTEP_MAKEFILES = /usr/share/GNUstep/Makefiles include $(GNUSTEP_MAKEFILES)/common.make ADDITIONAL_FLAGS += -std=gnu11 TOOL_NAME = test test_OBJC_FILES = main.m include $(GNUSTEP_MAKEFILES)/tool.make ALL_LDFLAGS += hello.o 最后,ALL_LDFLAGS标志中添加了hello.o之后,GNUmakefile就会将hello.o与main.o一起连接成最终的可执行文件test。
gcc `gnustep-config --objc-flags` -lgnustep-base hello.m -o hello
另外,我们也可以直接在控制台使用:gnustep-config --objc-flags 来查看编译Objective-C的默认编译选项,从而可以做些调整。 如果我们要使用Clang以及Objective-C 2.0的库可以参考这个链接:http://wiki.gnustep.org/index.php/Building_GNUstep_with_Clang 下载其它库可以参考这个链接:http://wwwmain.gnustep.org/resources/downloads.php?site=ftp%3A%2F%2Fftp.gnustep.org%2Fpub%2Fgnustep%2F
|
请发表评论