Keil、IAR生成靜態庫方法,靜態與動態庫的區別

關注、星標公衆,不錯過精彩內容

作者:strongerHuang

微信公衆號:strongerHuang

庫,對於程序員的人來說,應該都不陌生。但有很多初學者,及已經工作的朋友對庫的理解還處於書本概念階段,也就是自己沒有生成及使用過庫。今天就來簡單分享一下Keil、IAR生成靜態庫方法,靜態與動態庫的區別。

一、關於庫

庫函數(Library function)是把函數放到庫裏,供別人使用的一種方式。方法是把一些常用到的函數編完放到一個文件裏,供不同的人進行調用。調用的時候把它所在的文件名用#include<>加到裏面就可以了。一般是放到lib文件裏的。

---來自百度百科

很多朋友都知道printf打印函數,我們在代碼中調用printf函數打印數據時,已經調用了標準的「微庫」,比如Keil、IAR中使用「微庫」,需要配置:

1.Keil MDK使用微庫

Project -> Options for Target -> Target 勾選上「Use Micro LIB」,如下圖:

2.IAR EWARM使用微庫

Project -> Options -> General Options -> Library Configuration 選中「Full」,如下圖:

什麼情況下要生成庫?

1.代碼模塊化定型。也就是說模塊代碼的功能在經過無數次驗證,並無誤後,方便團隊的協同開發,這個時候可以將模塊代碼生成庫。

2.提供SDK給客戶開發。這裏一般是指源代碼對客戶不具有公開性的原因,包括某些特有算法、實現特有功能的具體過程等。

生成庫的原則?

簡單來說就是使代碼結構化、模塊化、源碼不具公開性等。要求代碼高內聚、低耦合。

二、Keil、IAR如何生成庫?

代碼工程生成庫的過程只需要對工程進行配置即可,這裏再簡單講一下過程,其實在我「系列教程」中有相關內容。

1.Keil MDK

Project -> Options for Target -> Output 勾選上「Create Library」即可。

2.IAR EWARM

Project -> Options -> General Options -> Output 勾選上「Library」即可。

三、庫在工程的使用方法

「.Lib」、「.a」這種庫大家可以理解爲「.c」,只是它已經經過處理,我們看不到源文件。我們只需要像添加「.c」文件,將其添加到工程即可。

如下圖,我們將STM32F10x_StdPeriph_Driver標準外設庫生成「STM32F10x_StdPeriph_Driver.a」庫,添加到工程中:

四、靜態庫和動態庫的區別?

上面Keil生成的庫是以「.Lib」爲後綴的文件,IAR是以「.a」爲後綴的文件,你們知道他們是靜態庫還是動態庫嗎?

答案是:二者都是靜態庫。

爲什麼都是靜態庫呢?先看一下靜態庫和動態庫的區別就會知道。

簡單的來說二者的區別:

  • 靜態庫:就是在編譯的時候直接將需要的代碼連接進可執行程序中去;

  • 動態庫:就是在需要調用其中的函數時,根據函數映射表找到該函數然後調入堆棧執行。

從上面的描述可以知道,靜態庫是我們MCU開發者常用的一種,而動態庫常用於Linux、Windows等開發場合。

推薦閱讀:

基於STM32的Keil、IAR仿真打印輸出

快速理解STM32位帶操作原理和用途

空指針,段錯誤,還是不知道bug在哪裏?

關注微信公衆號『strongerHuang』,後臺回覆「1024」查看更多內容,回覆「加羣」按規則加入技術交流羣。

長按前往圖中包含的公衆號關注