iOS 靜態類庫 打包 C,C++檔案及和OC混編

來源:互聯網
上載者:User

標籤:

iOS 靜態類庫 編譯 C,C++

我們都知道,OC 原生支援C, 在 建立的 OC類的 .m 裡面,可以直接編寫C的代碼;

同樣 Xcode 也支援 OC ,C++的混編,此時,我們通常把OC建立的 .m 檔案,手動修改為 .mm 檔案以支援 oc c++的混編

基於上面的特性,我們在打包靜態類時,可以編譯C,OC,C++ 以及三者混合的代碼;

因為大多數誇平台的演算法庫代碼都是C或是C++寫的,我們利用Xcode編譯成靜態類庫,可以非常安全的提供給別人使用

如下樣本:

一:靜態庫打包 C 代碼

1. Xcode 建立一個 靜態類庫項目,就是Cocoa Touch Static Library;

2. 建立好項目之後,File new,C file, 建立一個 A.c 檔案;

   在 A.c 裡面,寫一個測試代碼,假如 hello() 方法,是咱們的核心代碼,不想讓別人知道,只想給外界提供一個 方法名;hello()

void hello(void){    printf("hello world!");  }

  這時,我們可以再接著 建立一個 Header File ,命名為 A.h, 在該檔案裡面,寫上  

void hello(void);

 上面 .c 檔案的 方法名,即可;然後在 靜態類庫的選項裡面,,把 .c 添加到 編譯裡面,把 .h 添加到 輸出裡面;

 這樣,別人在拿到打包的 .a 之後,再配置標頭檔,,即可使用 hello() 方法;而不用 擔心會暴露 hello()的內部實現;

 注意:在使用該靜態庫的時候,不要用 .mm , 用 .m ;因為此編譯的是C方法,OC 原生支援C;

二:靜態類庫打包 C++ 代碼

1. Xcode 建立一個 靜態類庫項目,就是Cocoa Touch Static Library;

2. New File 建立一個 C++ Class, 此時項目裡面,會產生名為 A.cpp 和 A.h ;

   可以看到 以後 C++ 代碼,方法的聲明 放到 A.h 裡面,,方法的實現 放到  A.cpp 裡面,實現即可;

   在給別人打包提供時,同樣把 cpp 放到編譯裡面,把.h 放到 輸出裡面,即可;

   如 我們在 A.h 裡面同樣放上 一個 c的 測試 hello(); 方法聲明

void hello(void);

  在 A.cpp 裡面,寫上方法的實現

void hello(void){    printf("hello world");}

  打包編譯,在使用的時候,我們就要用 .mm 了,而不能用 .m了,,

  雖然這兩種方式寫的同樣的是 C的方法,但是意義不一樣了;上面編譯的是純C,而下面的,雖然寫的是c代碼,但是編譯的是C++;

 所以在調用此包時,要用 OC,C++混紡,即 .mm 檔案;

 

三:總結注意

1. 如果編譯純C,.c檔案, 用 .m 即是 OC,C混編;

2. 如果編譯C++,.cpp檔案,用 .mm 即是 OC C++混編;

3. .cpp的檔案裡面,可以調用寫的 .c 檔案,用 .mm 即 OC,C,C++混編;

 

iOS 靜態類庫 打包 C,C++檔案及和OC混編

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.