iOS 靜態類庫 打包 C,C++文件及和OC混編


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++混編;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM