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

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀”爆發(fā)至今,五類新物種登上歷史舞臺
- 5 國產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計算迎來商業(yè)化突破,但落地仍需時間
- 7 東陽光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長空間
- 8 地平線自動駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關稅,能否乘機器人東風翻身?