LInux下生成靜態庫和動態庫

2021-09-10 01:30:26 字數 1630 閱讀 6206

靜態庫與動態庫生成例項

linux下庫**

編譯引數分析

靜態庫動態庫

在編譯過程中已經被載入可執行程式,所以體積較大

在可執行程式執行時才載入記憶體,在編譯過程中只是簡單的引用,所以**體積較小

準備好測試工作,寫好測試**test.h 、test.c、 main.c

#ifndef test_h

#define test_h

void print(const char *str);

#endif

#includevoid print(const char *str)

#include"test.h"

int main()

思考:在測試**中我們的test.c是可以通過gcc -o編譯嗎?

gcc -c test.c //生成test.o檔案gcc -c main.c 檔案gcc -o print main.o test.o //將main.o檔案和test.o編譯成乙個可執行檔案print./print //可正常執行!

ar rcs libmyprint.a test.o //生成靜態庫gcc -o print main.c -static -l. -lmyprint //生成可執行檔案print./print此時可以刪除靜態庫檔案再執行print會發現依然可以執行。

gcc -fpic -c *c //(此時的test.o檔案和main.c需重新編譯)gcc -shared -o libmyprint.so main.o test.o //生成動態庫gcc -o print main.c -l. -lmyprint //生成可執行檔案print./print此時可以刪除動態庫檔案再執行print發現會報錯

export ld_library_path='pwd' //將當前目錄新增為共享目錄
安裝在/lib或/usr/lib下,ld預設能找到

安裝在其他目錄,需要新增到/etc/ld.so.cashe

執行ldconfig,會自動重建/etc/ld.so.cache檔案

Linux下生成動態庫和靜態庫

最近搞linux的程式設計 寫寫這個 綜合網上例子和本人使用方法。編輯得到舉例的程式 hello.h hello.c和main.c hello.h 見程式1 為該函式庫的標頭檔案。hello.c 見程式2 是函式庫的源程式,其中包含公用函式hello,該函式將在螢幕上輸出 hello main.c ...

linux下生成,使用靜態和動態鏈結庫

當要使用靜態的程式庫時,聯結器會找出程式所需的函式,然後將它們拷貝到執行檔案,由於這種拷貝是完整的,所以一旦連線成功,靜態程式庫也就不再需要了。然而,對動態庫而言,就不是這樣。動態庫會在執行程式內留下乙個標記 指明當程式執行時,首先必須載入這個庫。由於動態庫節省空間,linux下進行連線 的預設操作...

linux 靜態庫和動態庫生成

靜態庫 ar rcs lib a xx1.o xx2.o 生成靜態庫 c 建立乙個庫 s 建立目標檔案索引,在建立較大的庫時,能加快時間 rablib lib a 為庫檔案建立索引。ar t lib a 檢視庫檔案內所含目標檔案名字 ar tv lib a 檢視庫檔案內所含目標檔案,顯示檔名 時間 ...