c语言编译生成obj,GCC编译Objective-C源文件
本章主要講的是使用 GCC 編譯 Objective-C。
Objective-C 可以把它看成是 C 語言的擴充,同時它又支持類的使用,所以也是面向對象的編程語言,通常寫作是 ObjC 或者是 OC。它主要用于 Mac OS X 和 GNU step 系統。因為 GCC 中包含 Objective-C 源程序的編譯器,所以在 Linux 系統上可以開發這種編程語言。但是它與 GCC 編譯的其它語言不同,Objective-C 在 GCC 中沒有標準定義。
Objective-C相關的文件類型展示如下:
.a 為靜態庫文件,跟C/C++相同
.h 為頭文件
.m 為需要預處理的 Objective-C 源文件
.mi 為不需要預處理的 Objective-C 源文件
.o 為適用于連接的目標文件格式
.so 為動態鏈接庫文件
編譯Objective-C源文件
從各種角度上看,Objective-C 程序與 C 程序在編寫語法上非常的相似。可以說編寫不包含對象的 Objective-C 程序與 C 程序的語法形式完全相同。
實例:創建一個 Objective-C 文件的源文件 test.m。
/*test.m*/
#import
int main(void)
{
printf("hello world\n");
return 0;
}
編譯源文件的命令如下:
gcc test.m -lobjc -o test
使用上面命令編譯的時候可能會報錯,如果出現下面的錯誤信息:
gcc: error trying to exec ‘cclobj’: execvp: 沒有那個文件或目錄
那是因為缺少了相關的庫文件,可以通過如下的命令安裝:
sudo apt-get install gobjc gnustep gnustep-devel
如果文件的語法格式沒有出現錯誤,我們再去執行的時候就不會產生錯誤了。這就是使用 gcc 編譯 Objective-C 源文件,編譯時可以通過參數選項-Wno-import來禁止顯示警告消息。
當然,我們也可以看到與 C 語言不同的地方,Objective-C 源程序包含頭文件使用的是 #import 取代了關鍵字 #include。這兩個關鍵字作用是相同的,但是 #import 不僅可以用來包含頭文件,而且在編譯相同單元的時侯不會被多次包括進來。如果想要利用 #include 來達到相同的效果,需要在頭文件中使用條件編譯。
選項-lobjc指出使用的庫是 libobjc.a(Objective-C的對象庫),但實際上對于沒有對象的簡單程序,這個選項并不是必須的。編譯程序時,通過文件名的后綴名 .m 被識別為 Objective-C 源程序,選項-o用于指定輸出文件的名字,默認的輸出文件名也是 a.out。
編譯包含對象的源文件
Objective-C編程語言是面向對象的編程語言,我們來看一下這種編程語言中類的創建和使用。
類方法在書寫上有格式的要求,必須以加號(+)開頭。使用時只能由類來調用,并且不能訪問成員變量。
對象方法在書寫格式上也有要求,以減號(-)開頭。使用時只能由對象來調用,對象方法中可以訪問當前對象的成員變量。
類在使用的時候注意事項:
Objective-C 是單繼承。
基本上所有類的根類是 NSObject。
不允許子類和父類擁有相同名稱的成員變量。
父類必須聲明在子類前面,實現不用在子類前。
調用某個對象/類的方法時,優先去當前對象/類中找,若找不到去父類中找。
子類會繼承父類所有的變量不管是否是私有,只是能不能直接訪問的問題。
父類只在 implementation 里定義的變量,子類也會繼承。
編譯包含對象的 Objective-C 源文件。編譯文件使用如下的命令:
gcc main.m -o main.o
gcc Speak.m -o Speak.o
gcc main.o Speak.o -lobjc -o main
我們還可以使用另一種方法:
gcc main.m Speak.m -lobjc -o main
制作靜態庫文件
將需要封裝成靜態庫文件的源文件編譯生成 .o 目標文件:
gcc? test.m? -o test.o
使用 ar 命令制作成靜態庫文件:
ar -r libtest.a test.o
通過上面的流程可以發現,Objective-C 與 C 語言制作靜態庫文件的方式,當然使用的方法也是相同的,具體的制作流程可以參考 C 語言。
制作共享庫
為需要封裝的源文件創建目標文件:
Gcc -fpic -Wno-import -c test.m -o test.o
需要添加編譯選項-fpic。為了讓編譯的源文件可以載入內存中的任何位置,并且能夠從載入的位置執行目標代碼。
將目標文件創建成共享庫:
gcc -shared test.o -o test.so
我們可以將這兩條命令組合成為一條命令:
gcc -fpic -shared test.m -o test.so
總結
以上是生活随笔為你收集整理的c语言编译生成obj,GCC编译Objective-C源文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数调用的参数太少c语言,调用input
- 下一篇: c语言 宏教程 pdf,C语言之详解_i