VS平臺(tái)下關(guān)于靜態(tài)庫的創(chuàng)建與使用
靜態(tài)庫簡介
靜態(tài)庫是在鏈接階段會(huì)將匯編成成的目標(biāo)文件.o與引用到的庫一起鏈接打包到可執(zhí)行文件中绸硕,因此對應(yīng)的鏈接方式稱為靜態(tài)鏈接婿屹,靜態(tài)庫可以簡單看成是一組目標(biāo)文件的集合,即很多目標(biāo)文件經(jīng)過壓縮打包后形成的一個(gè)文件。
- 靜態(tài)庫對函數(shù)庫的鏈接是放在編譯時(shí)期完成的保屯。
- 程序在運(yùn)行時(shí)與函數(shù)庫再無瓜葛袒餐,移植方便。
- 浪費(fèi)空間和資源漾肮,因?yàn)樗邢嚓P(guān)的目標(biāo)文件與牽涉到的函數(shù)庫被鏈接成一個(gè)可執(zhí)行文件厂抖。
靜態(tài)庫的創(chuàng)建流程
靜態(tài)庫的創(chuàng)建會(huì)生成一個(gè).lib文件,供其他工程調(diào)用
-
首先在工程中克懊,點(diǎn)擊文件 - 新建 - 項(xiàng)目忱辅。
staticLib01 -
為庫起名稱,并指定好工程位置谭溉,確定后點(diǎn)擊下一步耕蝉。
staticLib02
staticLib03 -
將應(yīng)用程序類型設(shè)定為靜態(tài)庫,點(diǎn)擊確定夜只。
staticLib04 -
為此工程添加.h文件和.cpp文件垒在。
staticLib05
staticLib06
staticLib07
staticLib08 -
為庫文件編寫頭文件的內(nèi)容。
staticLib09 -
為庫文件編寫cpp文件的內(nèi)容。
staticLib10 -
隨后點(diǎn)擊生成 - 生成解決方案/重新生成解決方案场躯,即可生成Add.lib的庫文件谈为。
staticLib11
staticLib12 調(diào)用該庫文件的作用為,輸入兩個(gè)int類型的整數(shù)踢关,返回兩數(shù)的和伞鲫。
調(diào)用方法:int Add(int, int)
靜態(tài)庫的調(diào)用方法
-
在需要調(diào)用該庫文件的工程中,右擊工程签舞,選擇屬性秕脓,進(jìn)行相關(guān)配置。
staticLib13
staticLib14 -
在配置屬性 - VC++目錄中儒搭,包含目錄為庫文件的Add.h頭文件所在的目錄吠架,而庫目錄為Add.lib庫文件所在的目錄,點(diǎn)擊確定搂鲫。
staticLib15 -
在配置屬性 - 鏈接器 - 輸入中傍药,在附加依賴項(xiàng)中添加要調(diào)用的庫,輸入Add.lib魂仍,點(diǎn)擊確定即可拐辽。
staticLib16 -
配置完成后,在需要調(diào)用庫的工程中便可以引用頭文件擦酌,并調(diào)用庫的功能俱诸。
staticLib17 -
編譯運(yùn)行后,成功調(diào)用庫赊舶。
staticLib18
Add庫的頭文件代碼
#ifndef _ADD_H_
#define _ADD_H_
int Add(const int, const int);
#endif
Add庫的cpp代碼
#include "Add.h"
int Add(int a, int b)
{
return (a + b);
}
小結(jié)
由于靜態(tài)庫是在編譯過程中靜態(tài)地被鏈接到最終的可執(zhí)行文件當(dāng)中乙埃,占據(jù)了部分內(nèi)存空間,在程序執(zhí)行時(shí)也同庫函數(shù)再無關(guān)系锯岖,由此可見靜態(tài)庫在程序的使用中并不靈活介袜,不利于項(xiàng)目后續(xù)的開發(fā)工作,而動(dòng)態(tài)庫的概念則解決了靜態(tài)庫的相關(guān)問題出吹。