一. 靜態庫
靜態庫(.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...