在ubuntu14.04上搭建Objective-C开发环境

来源:互联网 发布:淘宝怎么打造一个爆款 编辑:程序博客网 时间:2024/06/05 11:47

我们的机器人需要iOS客户端,于是要招iOS开发人员,而我们都不懂iOS开发,于是我紧急了解了下Objective-C(以下简称OC)的历史和语法,然后想在ubuntu上动手试试OC编程,于是按照这篇文章搭建环境并编译helloworld代码

gcc `gnustep-config --objc-flags` -lgnustep-base hello.m -o hello

结果报错:

/tmp/ccNFKMXF.o:在函数‘main’中:/home/haipeng/projetcs/ios/hello.m:5:对‘objc_get_class’未定义的引用/home/haipeng/projetcs/ios/hello.m:5:对‘objc_msg_lookup’未定义的引用/home/haipeng/projetcs/ios/hello.m:5:对‘objc_msg_lookup’未定义的引用/home/haipeng/projetcs/ios/hello.m:7:对‘NSLog’未定义的引用/home/haipeng/projetcs/ios/hello.m:8:对‘objc_msg_lookup’未定义的引用/tmp/ccNFKMXF.o:在函数‘__objc_gnu_init’中:/home/haipeng/projetcs/ios/hello.m:10:对‘__objc_exec_class’未定义的引用/tmp/ccNFKMXF.o:(.data.rel+0x0):对‘__objc_class_name_NSConstantString’未定义的引用/tmp/ccNFKMXF.o:(.data.rel+0x8):对‘__objc_class_name_NSAutoreleasePool’未定义的引用collect2: error: ld returned 1 exit status

上面的报错信息明显是链接错误,我检查了GNUstep的安装,有gnustep-base库。又搜索了其他相关文章,原来还依赖objc库,加上

gcc `gnustep-config --objc-flags` -lobjc -lgnustep-base hello.m -o hello

结果还是相同的错误尴尬

该有的库都有了,还出错,想起gcc由来已久的feature:

        GCC在链接时对依赖库的顺序是敏感的,被依赖的库必须放在后面,比如libfoo.a依赖libbar.a,必须写成-lfoo -lbar这样的顺序,否则链接将出错。

命令行调整成以下后问题解决。

gcc `gnustep-config --objc-flags` hello.m -o hello -lgnustep-base -lobjc

运行输出

haipeng@whp:~/projetcs/ios$ ./hello 2016-07-29 09:43:39.422 hello[4253] hello world

老外写的文章一样不让人放心呀再见

0 0