頭文件+宏,完美解決聲明函數(shù)問題!
2. 編譯器宏定義
如果在寫庫代碼的時候,使用的是 C++,而使用者使用的是 C 語言,那么就需要對庫函數(shù)進(jìn)行 extern “C” 聲明,讓編譯器不要對函數(shù)的名稱進(jìn)行改寫。
編譯器 g++ 預(yù)定義了宏 __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. 使用庫
在使用庫的應(yīng)用程序中,也需要在代碼中 include 這個頭文件,然后加上編譯選項中定義的各種宏,來生成對應(yīng)的 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)
這樣就相當(dāng)于聲明導(dǎo)入庫函數(shù)了。
五、Linux 平臺場景分析
Linux 平臺下就簡單多了,只需要注意編譯器的問題,而沒有導(dǎo)出和導(dǎo)入之分。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
-
2 華為,重大突破!
- 1 人形機器人“第一股”來了!宇樹科技即將上會
- 2 全球股市陷AI獨大結(jié)構(gòu)性瘋狂
- 3 AI狂歡遇上油價破百,全球股市還能漲多久? | 產(chǎn)聯(lián)看全球
- 4 DeepSeek融資500億,梁文鋒難逃資本局
- 5 谷歌2026 I/O大會完整回顧:模型依然重要,但智能體正在接管一切
- 6 全球資本,重倉中國機器人
- 7 Figure AI 交付突破350臺,陪跑特斯拉會迎來iPhone 時刻嗎?
- 8 Anthropic發(fā)布2028年全球AI領(lǐng)導(dǎo)力的兩種情景報告
- 9 “國產(chǎn)GPU第一股”摩爾線程首季扭虧,但造血能力仍待考驗
- 10 特斯拉宣布監(jiān)督版FSD登陸中國?
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市


分享













