vs下製作和使用 lib靜態庫

2021-05-28 10:30:27 字數 2196 閱讀 1361

關於鏈結庫的講解在這個**上有不錯的講解:

下面寫一下自己的實踐:

首先可以建立乙個空工程,然後再工程屬性---configuration properties---general---configuration type改為.lib,建立可執行工程預設情況下是.exe

然後,可以在這個工程中建立標頭檔案和原始檔,如:

chang.h:

int fun(int a, int b)

chang.cpp:

#include

#include "chang01.h"

using namespace std;

int fun(int a, int b)

之後編譯就會在工程資料夾下的debug資料夾下生成以當前工程名命名的lib檔案,這個會生成chang.lib。

到這裡靜態鏈結庫檔案製作完畢。

下面來說明使用:

建立乙個要使用這個庫的工程如libtest

第一種方法:

把這個庫拷貝到工程目錄下,(最好拷貝到vs編譯器可以找到的目錄下,這個路徑在tools---options---projects and soulutions---show libraray的目錄下,至於這些目錄如何檢視,在以前的部落格中有相關的文章,這樣可以方便編譯器編譯時候查詢到這個庫檔案)

之後把庫標頭檔案拷貝到當前目錄下

在libtest的實現檔案中,首先包含這個標頭檔案,然後使用pragma指令指明鏈結庫chang.lib,

然後再工程中使用這個函式中的庫就可以了,原始檔如下:

#include

#include "chang.h"

using namespace std;

#pragma comment(lib,"chang.lib")

void main()

之後執行就可以了

第二種方法:

這個庫檔案可以在任意路徑下,首先在tools---options---projects and soulutions---show libraray目錄下新增這個庫檔案所在的目錄

然後再在工程屬性---configuration properties---linker---addtional library directories下新增這個庫檔案所在的目錄

在工程屬性---configuration properties---linker---input---addtional dependencies新增要使用的庫的名字,現在這個就是chang.lib

之後把庫檔案的標頭檔案拷貝到libtest工程的原始檔資料夾下

最後在原始檔中就可以不使用pragma指令了,原始檔如下:

#include

#include "chang.h"

using namespace std;

void main()

最後編譯執行即可

一些小發現:

當不把頭檔案拷貝到libtest的時候,直接包含chang.h標頭檔案是不可以的,報找不到標頭檔案

當不包含標頭檔案的時候,直接使用這個庫是不可以的,報錯是找不到fun函式,

然後當不拷貝標頭檔案到libtest下,而只是在libtest的原始檔中進行int fun宣告,則可以正常執行;如下:

#include

#include "chang.h"

using namespace std;

#pragma comment(lib,"chang.lib")

int fun(int a, int b);

void main()

當在libtest下重新實現該函式的時候,會執行重新實現的函式,如下:

#include

#include "chang.h"

using namespace std;

#pragma comment(lib,"chang.lib")

int fun(int a, int b);

int fun(int a, int b)

void main()

有這些現象推測:lib庫檔案只有函式的二進位制實現,而不包含函式的宣告,標頭檔案等,

使用的時候也只需要把庫鏈結進來,然後對庫中的檔案進行完全相同的宣告,就可以直接呼叫庫中的檔案了,函式名只是索引

但是重新實現後就會執行這個版本,說明執行時候有一定的鏈結順序

所以,還是按照一般的做法,把庫檔案的標頭檔案拷貝過來就好了,只是個人一些推測,還請看到這篇文章的高人指點,呵呵~~

linux下靜態庫的製作和使用

靜態庫的命名規則 lib 庫的名字 a 靜態庫的製作過程 step1.生成對應的.o檔案,gcc c step2.將所有生成的.o檔案打包 ar rcs 靜態庫的名字 libmytest.lib 生成的所有的.o 靜態庫的使用 以呼叫庫libsum.a為例 方式1.gcc main.c lib li...

靜態庫的製作和使用

靜態庫的建立和使用 1 命名規則 lib 庫的名字 a 例子 libmytest.a 2 製作步驟 a.生成對應的.o檔案 c o b.將生成的.a檔案打包 ar rcs 靜態庫的名字 libmytest.a 生成的所有的.o 3 發布和使用靜態庫 a.發布靜態庫 b.標頭檔案 include 存放...

linux靜態動態庫製作和使用

本質優點 動態庫共享庫的 是在可執行程式執行時才載入記憶體 1.省空間2.bug修復利於維護3.開發效率 靜態庫靜態庫被鏈結後庫就直接嵌入可執行檔案 1.速度快 linux靜態動態庫製作和使用 動態庫步驟 生成.so文檔案 加 fpic和 shard和檔名需lib so 1.1.gcc fpic o...