1. 程式人生 > >iOS 靜態類庫 打包 C,C++檔案及和OC混編

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

相關推薦

iOS 靜態 打包 C,C++檔案OC

iOS 靜態類庫 編譯 C,C++ 我們都知道,OC 原生支援C, 在 建立的 OC類的 .m 裡面,可以直接編寫C的程式碼; 同樣 Xcode 也支援 OC ,C++的混編,此時,我們通常把OC建立的 .m 檔案,手動修改為 .mm 檔案以支援 oc c++的混編

C++通過jsoncpp讀寫JSON檔案-json用法詳解

介紹: JSON 是常用的資料的一種格式,各個語言或多或少都會用的JSON格式。 JSON是一個輕量級的資料定義格式,比起XML易學易用,而擴充套件功能不比XML差多少,用之進行資料交換是一個很好的選擇。JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用於標記

C++通過TinyXML讀寫XML檔案

TinyXML是一個開源的解析XML的解析庫,能夠用於C++,能夠在Windows或Linux中編譯。這個解析庫的模型通過解析XML檔案,然後在記憶體中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。DOM模型即文件物件模型,是將整個文件分成多個元素(如書、章、節、段等)

Android 自定義打包jar! 誰說不可以打包res 檔案

我們經常會有這種需求, 自己開發一個類庫jar包, 提供給別人呼叫。 網上很多教程都是這麼說: 建立一個Android project, 用eclipse 的export 匯出, 去掉AndroidManifest.xml, res 什麼的, 全都不是正解! 用這

VS2017生成靜態連結並被C++呼叫

生成靜態連結庫 新建C++ 靜態庫工程   新建水果Fruit類   在Fruit建構函式裡新增一句列印函式,方便我們後續驗證   生成後到工程目錄下的Debug目錄下檢視生成的.lib檔案   呼叫靜態連結庫 新建C+

【原創】開源Math.NET基礎數學使用(08)C#進行數值積分

  在數值計算的需求中,數值積分也是比較常見的一個。我們也知道像Matlab,Mathematics等軟體的積分求解功能非常高大上,不僅能求解定積分,還能求解不定積分,甚至多重積分等等。而Math.NET這個元件沒有如此高階的功能,目前也只提供了比較件的閉區間上的定積分求解功能。今天就一起來看看,因為不定

【原創】開源Math.NET基礎數學使用(13)C#實現其他隨機數生成器

1 public abstract class RandomSource : System.Random 2 { 3 readonly bool _threadSafe; 4 readonly object _lock = new objec

【原創】開源Math.NET基礎數學使用(05)C#解析Delimited Formats資料格式

前言   上一篇文章,我們介紹了使用C#讀寫Matlab的Mat資料格式和通用的Matrix Market資料格式。今天還要介紹一個Math.NET讀取Delimited Formats資料格式的例子。Delimited Formats(也稱DSV) 資料格式也是一種比較常見的資料儲存和交換格式,和CS

【原創】開源Math.NET基礎數學使用(03)C#解析Matlab的mat格式

前言   本人在09年使用該元件的時候,主要原因也是為了替代Matlab,進行相關數學計算,現在依然有很多人關注Matlab計算,特別是學生,而很多也在使用C#,所以這些人通常由於個人能力有限(無法精通某一個門語言來解決綜合問題),無法單純的通過C#或者Matlab來解決問題,就想通過混合程式設計來

【原創】開源Math.NET基礎數學使用(16)C#計算矩陣秩

  上個月對Math.NET的基本使用進行了介紹,主要內容有矩陣,向量的相關操作,解析資料格式,數值積分,資料統計,相關函式,求解線性方程組以及隨機數發生器的相關內容。這個月接著深入發掘Math.NET的各種功能,並對原始碼進行分析,使得大家可以儘可能的使用Math.NET在.NET平臺下輕易的開發數學計

【原創】開源Math.NET基礎數學使用(14)C#生成安全的隨機數

  真正意義上的隨機數(或者隨機事件)在某次產生過程中是按照實驗過程中表現的分佈概率隨機產生的,其結果是不可預測的,是不可見的。而計算機中的隨機函式是按照一定演算法模擬產生的,其結果是確定的,是可見的。我們可以這樣認為這個可預見的結果其出現的概率是100%。所以用計算機隨機函式所產生的“隨機數”並不隨機,

【原創】開源Math.NET基礎數學使用(10)C#進行基本資料統計

1 /// <summary> 2 /// 對未排序的陣列進行統計操作 警告: Methods with the Inplace-suffix may modify the data array by reordering its entries. 3 /// </su

【原創】開源Math.NET基礎數學使用(12)C#隨機數擴充套件方法

1 /// <summary>這個類是對System.Random類的擴充套件,擴充套件方法可以生成更多型別的偽隨機數,而不是僅僅是double和Int32型別</summary> 2 /// <remarks>這個擴充套件是執行緒安全的,並且只有在Math.

【原創】開源Math.NET基礎數學使用(11)C#計算相關係數

/// <summary>2個數據集的相關度計算類</summary> public static class Correlation { /// <summary>計算皮爾遜積差相關係數</summary> /// <para

【原創】開源Math.NET基礎數學使用(15)C#計算矩陣行列式

  上個月對Math.NET的基本使用進行了介紹,主要內容有矩陣,向量的相關操作,解析資料格式,數值積分,資料統計,相關函式,求解線性方程組以及隨機數發生器的相關內容。這個月接著深入發掘Math.NET的各種功能,並對原始碼進行分析,使得大家可以儘可能的使用Math.NET在.NET平臺下輕易的開發數

【原創】開源Math.NET基礎數學使用(04)C#解析Matrix Marke資料格式

前言   上一篇文章,我們介紹了使用C#讀寫Matlab的Mat資料格式的情況。mat格式的廣泛應用使得很多人都瞭解,但同樣還有一些資料格式也是在科學計算,資料分析,測試等方面的通用資料格式,那就是接下來我們要介紹的Matrix Market格式。我們同樣是使用C#來操作該格式。 1.Matr

【原創】開源Math.NET基礎數學使用(17)C#計算矩陣條件數

  上個月對Math.NET的基本使用進行了介紹,主要內容有矩陣,向量的相關操作,解析資料格式,數值積分,資料統計,相關函式,求解線性方程組以及隨機數發生器的相關內容。這個月接著深入發掘Math.NET的各種功能,並對原始碼進行分析,使得大家可以儘可能的使用Math.NET在.NET平臺下輕易的開發數學計

C語言檔案操作 預編譯命令

//read檔案 int main(){ char *path = "D:\\friends.txt"; FILE *fp = fopen(path, "r"); char buff[500]; while (fgets(buff,50,fp)){ printf("%s\n", b

如何製作vc6靜態連結的IDA SIG檔案

網上有製作vc靜態連結庫的IDA SIG檔案的文章,但是他針對的是VC7, 並且給出的指令碼有一點小問題,我基於他的基礎做了部分修改: 1. 把vc6下的libc.lib 拷貝到flair61\bin路徑下,這樣執行prf,sigmake就不用再指定長長的路徑 2.嘗試用

使用FFMPEG分離出多媒體檔案中的H 264碼流

                在使用FFMPEG的類庫進行程式設計的過程中,可以直接輸出解複用之後的的視訊資料碼流。只需要在每次呼叫av_read_frame()之後將得到的視訊的AVPacket存為本地檔案即可。經試驗,在分離MPEG2碼流的時候,直接儲存AVPacket即可。在分離H.264碼流的時候,