標籤:
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混編