頭文件+宏,完美解決聲明函數(shù)問題!
2. 編譯器宏定義
如果在寫庫代碼的時(shí)候,使用的是 C++,而使用者使用的是 C 語言,那么就需要對庫函數(shù)進(jìn)行 extern “C” 聲明,讓編譯器不要對函數(shù)的名稱進(jìn)行改寫。
編譯器 g++ 預(yù)定義了宏 __cplusplus,因此,在頭文件中,就利用了這個(gè)宏,在 MY_API 中添加 extern "C" 聲明。
四、Windows 平臺(tái)場景分析
1. 編譯生成庫文件
(1) 生成靜態(tài)庫
在靜態(tài)庫中,不需要 __declspec(dllexport/dllimport) 的聲明,因此只需要區(qū)分編譯器即可(gcc or g++),在編譯選項(xiàng)中定義宏 MY_API_STATIC,即可得到最終的 MY_API 為:
gcc 編譯器:#define MY_API
g++ 編譯器:#define MY_API extern "C"
(2) 生成動(dòng)態(tài)庫
在編譯選項(xiàng)中,定義宏 MY_API_EXPORTS,這樣最終得到的 MY_API 就會(huì)變成:
gcc 編譯器:#define MY_API __declspec(dllexport)
g++ 編譯器:#define MY_API extern "C" __declspec(dllexport)
2. 使用庫
在使用庫的應(yīng)用程序中,也需要在代碼中 include 這個(gè)頭文件,然后加上編譯選項(xiàng)中定義的各種宏,來生成對應(yīng)的 MY_API 宏定義。
(1) 使用靜態(tài)庫
需要在編譯選項(xiàng)中定義 MY_API_STATIC,即可得到最終的 MY_API 為:
gcc 編譯器:#define MY_API
g++ 編譯器:#define MY_API extern "C"
(2) 使用動(dòng)態(tài)庫
在編譯選項(xiàng)中不需要任何宏定義,即可得到最終的 MY_API 為:
gcc 編譯器:#define MY_API extern "C" __declspec(dllimport)
g++ 編譯器:#define MY_API __declspec(dllimport)
這樣就相當(dāng)于聲明導(dǎo)入庫函數(shù)了。
五、Linux 平臺(tái)場景分析
Linux 平臺(tái)下就簡單多了,只需要注意編譯器的問題,而沒有導(dǎo)出和導(dǎo)入之分。

發(fā)表評論
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
最新活動(dòng)更多
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評>> 【評選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 【限時(shí)福利】TE 2025國際物聯(lián)網(wǎng)展·深圳站
推薦專題