靜態庫與動態庫生成例項
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 檢視庫檔案內所含目標檔案,顯示檔名 時間 ...