日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言编译生成obj,GCC编译Objective-C源文件

發布時間:2024/10/14 编程问答 89 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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源文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。