靜態庫與動態庫的生成

2021-08-17 14:29:31 字數 2288 閱讀 4305

一. 靜態庫

靜態庫(.a):程式在編譯鏈結時候把庫的**鏈結到可執行**中,程式執行時將不再需要靜態庫。 

測試程式:

add.h
#ifndef _add_h_

#define _add_h_

int add(int x,int y);

#endif

add.c
#include "add.h"

int add(int x,int y)

sub.h
#ifndef _sub_h_

#define _sub_h_

int sub(int x,int y);

#endif

sub.c
#include "sub.h"

int sub(int x,int y)

mul.h
#ifndef _mul_h_

#define _mul_h_

int mul(int x,int y);

#endif

mul.c
#include "mul.h"

int mul(int x,int y)

div.h
#ifndef _div_h_

#define _div_h_

int div(int x,int y);

#endif

div.c
#include "div.h"

int div(int x,int y)

main.c
#include#include "add.h"

#include "sub.h"

#include "mul.h"

#include "div.h"

int main()

在乙個目錄下,建立多個檔案,**及命名如上所示。

然後編譯add.c  sub.c  mul.c及div.c,生成add.o  sub.o  mul.o及div.o:

生成靜態庫:

( ar是gnu歸檔工具,rc表示replace and create。)

檢視靜態庫中的目錄列表:

( t:列出靜態庫中的檔案;v:verbose 詳細資訊)

( -l:指定庫路徑;-l:指定庫名)

測試目標檔案生成後,靜態庫刪掉,程式照樣可以執行。

二. 動態庫

動態庫(.so):程式在執行時才去鏈結動態庫的**,多個程式可共享使用庫的**。

態庫檔案的支援。

將上面的測試程式拷貝乙份至另外乙個目錄,用來生成動態庫:

類似於靜態庫,輸入如下命令:

( shared:生成共享庫格式;fpic:產生位置無關碼;庫名規則:lib***.so)

此時執行a.out出錯。

這裡我們可以用以下方法

解決:首先將該動態庫檔案拷貝至系統共享庫路徑下,一般指/usr/lib下。

更改ld_library_path:

此時執行就成功了。

再用ldd命令:記錄應用程式所依賴的動態庫。

libraw靜態庫與動態庫的生成

直接執行對應的qt檔案就可以得到對應的動態庫。注意只用執行libraw對應的子工程即可。動態庫會生成對應的dll和lib檔案。靜態庫在字尾名為win64.zip或者win32.zip的壓縮包裡面有。在lib資料夾下面。但是我使用後發現它自帶的靜態庫沒有生效。不知道是什麼原因。因此我使用vs2015對...

Linux生成動態庫 so與生成靜態庫 a

動態庫共享庫 第一步 通過gcc fpic c 編譯生成.o檔案 gcc fpic c a.c 編譯生成.o檔案 fpic與位置無關 gcc fpic c b.c 生成a.o,b.o編譯檔案。第二步 通過上面已經生成的a.o,b.o檔案生成.so檔案 方法1 gcc shared wl o liba...

Linux動態庫靜態庫的生成

函式庫 1 便於移植,方便使用 2 保密,保護智財權 靜態庫 編譯生成靜態庫 編譯生成靜態庫 1 把.c檔案編譯生成.o檔案 gcc c add.c 或gcc add.c c o add.c 2 把.o檔案編譯生成.a靜態庫 ar rc libadd.a add.o 3 靜態庫的使用 gcc mai...