靜態鏈結庫

2021-06-19 09:28:36 字數 3097 閱讀 5389

概念:

clr(公共語言執行時)對於現在的c++而言現在可以建立2種形式的c++**,一種是本地**(native),一種是託管**,如下圖的visual studio 2012(習慣用visual studio開發環境了,畢竟是主要寫c#的人):

當讓我使用c++的目的在於編寫跟windowsapi(直接跟作業系統打交道的**實現一些特殊的功能),所以不可否認的選擇win32.

靜態鏈結庫(.lib):首先明白乙個概念性的東西,所有的win32程式編譯生成之後都會生成乙個.exe的可執行檔案,靜態鏈結庫,顧名思義就是編譯的時候直接將.lib的**編譯進.exe可執行檔案。

建立靜態庫專案(這裡我選擇的是visual studio 2012來建立)

在選單欄上,選擇「檔案」,「新建、「專案」。

在「新建專案」對話方塊左窗格中,展開「已安裝」、「模板」、「visual c++」,然後選擇「win32」。

在中間窗格中,選擇「win32 控制台應用程式」。

在「名稱」框中為專案指定名稱,例如,mathfuncslib。 

在「解決方案名稱」框中為解決方案指定乙個名稱,例如 staticlibrary。

選擇「確定」按鈕。

在「win32 應用程式嚮導」對話方塊的「概述」頁上,選擇「下一步」按鈕。

在「應用程式設定」頁上的「應用程式型別」下,選擇「靜態庫」。

在「應用程式設定」頁上的「附加選項」下,清除「預編譯頭」核取方塊。 選擇

「完成」

按鈕建立專案。

給類庫專案新增類**

1.右鍵類庫專案選擇,類嚮導

2.選擇新增類。(裡面的內容我們按需填寫:類名,頭檔名,基類,是公有還是私有還是保護等)

3.確定這樣就建立好了,我們寫上自己的**編譯就可以了。會編譯成.lib檔案這就是我們的靜態類庫

靜態類庫的使用(有2種方式)

通過visual studio 2012ide整合開發環境採用引用的方式:在同乙個解決方案下新建乙個win32控制台應用程式,我們右鍵選擇引用

,然後在彈出的對話方塊裡面新增引用(然後勾選上你要新增的類庫即可)

若要引用 mathfuncslib.h 標頭檔案,必須修改包含的目錄路徑。 

在 myexecrefslib「屬性頁」對話方塊中,依次展開「配置屬性」節點和「c/c++」節點

,然後選擇「常規」。

在「附加包含目錄」旁邊,指定 mathfuncslib 目錄的路徑或瀏覽至該目錄。

剩下的就是使用類庫專案了,使用類庫裡面的方法跟使用本地的方法是一樣的。

使用配置檔案或者拖拽的方式或者編譯預處理巨集的方式

對於第三方的靜態類庫,開發者不會給你提供他們的原始碼,他們提供給你的只有.h和.lib檔案。

首先你要將相應的.h和.lib檔案拷貝到你的專案下

(注意:有解決方案的生成的時候.lib檔案在你的解決方案根目錄下面的debug或release資料夾下)

拖拽的方式:首先我們將.h放置在我們的專案下面,然後拖拽.lib檔案到我們的專案下面的resource files資料夾下,

這樣我們就可以使用靜態類庫了。

配置檔案的方式:(拷貝同上:.h和.lib檔案)

右鍵專案屬性,配置檔案屬性,選擇鏈結器(linker),選擇input,然後在右邊的附加依賴項裡面新增所依賴的.lib庫的

相對路徑(例如:..\debug\lib.lib)就可以了,然後在專案裡面引用例如:#include "math.h"

就可以使用類庫裡面的方法了。如圖所示:

為什麼每次都要引用.h呢?因為c++是乙個順序執行語言,任何函式的定義或者呼叫都必須在宣告之後

,也就是首先要告訴編譯器,函式什麼樣子的!

通過**的方式來定義鏈結器(感覺這種方式還方便一點)

定義乙個編譯指示器:在要專案的原始檔裡面定義

#pragma comment( lib, "..\\debug\\lib.lib" )  //指定本檔案生成的.obj檔案應與lib.lib一起鏈結。

#include "stdafx.h"

#include "math.h"

#include using namespace std;

#pragma comment(lib,"..\\debug\\lib.lib")

int _tmain(int argc, _tchar* argv)

{ math mymath;

int a=mymath.add(10,12);

cout另外補充一句:

在類庫專案裡面我們還可以使用以下的語法

extern "c" int add(int,int);//宣告乙個以c語言方式編譯、連線的外部函式

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...

靜態鏈結庫,動態鏈結庫

關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...