<center id="d07vw"></center>
<b id="d07vw"><noframes id="d07vw">
<noframes id="d07vw"><ul id="d07vw"><tr id="d07vw"></tr></ul></noframes>
<center id="d07vw"></center>
<tr id="d07vw"></tr>
訂閱
糾錯(cuò)
加入自媒體

頭文件+宏,完美解決聲明函數(shù)問(wèn)題!

2. 編譯器宏定義

如果在寫(xiě)庫(kù)代碼的時(shí)候,使用的是 C++,而使用者使用的是 C 語(yǔ)言,那么就需要對(duì)庫(kù)函數(shù)進(jìn)行 extern “C” 聲明,讓編譯器不要對(duì)函數(shù)的名稱(chēng)進(jìn)行改寫(xiě)。

編譯器 g++ 預(yù)定義了宏 __cplusplus,因此,在頭文件中,就利用了這個(gè)宏,在 MY_API 中添加 extern "C" 聲明。

四、Windows 平臺(tái)場(chǎng)景分析

 1. 編譯生成庫(kù)文件

(1) 生成靜態(tài)庫(kù)

在靜態(tài)庫(kù)中,不需要 __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)庫(kù)

在編譯選項(xiàng)中,定義宏 MY_API_EXPORTS,這樣最終得到的 MY_API 就會(huì)變成:

gcc 編譯器:#define MY_API __declspec(dllexport)

g++ 編譯器:#define MY_API extern "C" __declspec(dllexport)

2. 使用庫(kù)

在使用庫(kù)的應(yīng)用程序中,也需要在代碼中 include 這個(gè)頭文件,然后加上編譯選項(xiàng)中定義的各種宏,來(lái)生成對(duì)應(yīng)的 MY_API 宏定義。

(1) 使用靜態(tài)庫(kù)

需要在編譯選項(xiàng)中定義 MY_API_STATIC,即可得到最終的 MY_API 為:

gcc 編譯器:#define MY_API
g++ 編譯器:#define MY_API extern "C"

(2) 使用動(dòng)態(tài)庫(kù)

在編譯選項(xiàng)中不需要任何宏定義,即可得到最終的 MY_API 為:

gcc 編譯器:#define MY_API extern "C" __declspec(dllimport)

g++ 編譯器:#define MY_API __declspec(dllimport)

這樣就相當(dāng)于聲明導(dǎo)入庫(kù)函數(shù)了。

五、Linux 平臺(tái)場(chǎng)景分析

Linux 平臺(tái)下就簡(jiǎn)單多了,只需要注意編譯器的問(wèn)題,而沒(méi)有導(dǎo)出和導(dǎo)入之分。


<上一頁(yè)  1  2  
聲明: 本文由入駐維科號(hào)的作者撰寫(xiě),觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

    掃碼關(guān)注公眾號(hào)
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯(cuò)
    x
    *文字標(biāo)題:
    *糾錯(cuò)內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號(hào)