Keil5.15使用GCC編譯器鏈接.a庫文件
阿新 • • 發佈:2017-06-29
.net dex 函數聲明 header tracking ive 文章 之前 分享
最後,寫上自己測試代碼.
庫文件的NiipLib.c文件代碼:
我們知道,當使用第三方的代碼時,人家有可能會扔個Lib文件給你.這時候,別人僅僅要提供header文件給你,則你就能夠通過Lib文件及header的函數聲明,對Lib中的函數進行調用.在Keil中假設使用ARMCC調用Lib文件,相信大家都能從網上找到方法.那假設在Keil中使用GCC來鏈接第三方GCC編譯好的Lib文件——".a"應該怎樣呢?
在告訴大家方法之前,我們寫個簡單的函數,然後用GCC編譯器編譯產生.a文件,便於我們進行測試.
首先,在Keil中配置gcc編譯環境,這個能夠參考我的文章.
Keil5.15使用GCC編譯器編譯STM32project,裏面有交大家配置方法.
接下來,將project配置成生成庫方式.這個跟Keil ARMCC的方式非常像.
最後,寫上自己測試代碼.
庫文件的NiipLib.c文件代碼:
int NiipLib_GetValue(unsigned char* pBuffer,int nSize)
{
int nIndex = 0;
for(nIndex = 0;nIndex <nSize;nIndex++)
{
pBuffer[nIndex] = nIndex;
}
return nIndex;
}
庫文件的NiipLib.h文件代碼:
#ifdef __cplusplus
extern "C" {
#endif
int NiipLib_GetValue(unsigned char* pBuffer,int nSize);
#ifdef __cplusplus
}
#endif
點擊編譯,我們能夠在編譯輸出文件夾下得到"libNiipLib.a"文件.接著,我們就要在另外個project引用這個庫文件了.
將"libNiipLib.a"文件與"NiipLib.h"復制到自己新建的或者已存在的項目以下.以下圖片的重點來了,請大家留意一下,開始"找不同"或者"大家來找茬".
細心的人,會發現為什麽我"Include Libraries"這個地方,為什麽填寫的是"NiipLib"為什麽不是"libNiipLib.a"?
事實上,我開始也填寫"libNiipLib.a",但編譯器老提示無法找到"libNiipLib.a"這個文件.我真的想說FUCK.在網上搜索了一下,發現GCC有個變態的情況,叫做"隱式約定命名規則".
什麽叫做"隱式約定命名規則"?用別人的解釋
-ltest 表示要鏈接動態庫libtest.a文件,這是gcc隱式約定命名規則。也就是庫名帶lib頭,比方libtest.a,而在鏈接參數上則不帶,比方-ltest就表示要鏈接libtest.a
而我的理解就是,你要調用什麽.a文件,你僅僅需去掉文件名稱前綴的"lib"及後綴的".a",就能夠了。
測試結果:
來自:http://blog.csdn.net/lan120576664
Keil5.15使用GCC編譯器鏈接.a庫文件