關於鏈結庫的講解在這個**上有不錯的講解:
下面寫一下自己的實踐:
首先可以建立乙個空工程,然後再工程屬性---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...