在ubuntu14.04上搭建Objective-C開發環境

我們的機器人需要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

老外寫的文章一樣不讓人放心呀再見
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章