動態庫的封裝

2021-08-20 03:15:18 字數 580 閱讀 9950

以 add.c 為例

1.建立庫函式的原始檔:vim add.c

2.生成目標檔案:gcc -c add.c -fpic

3.生成動態庫:gcc add.o -o libadd.so -shared

備註:libadd.so:lib是字首,add是庫的名字,so是字尾,代表是動態庫

4.建立呼叫庫函式的原始檔:vim demo.c

5.編譯執行:gcc demo.c ./libadd.so

靜態庫和動態庫的區別

1.靜態庫的字尾是 .a,動態庫的字尾是 .so;

2.在編譯鏈結的時候,對於靜態庫鏈結器是把靜態庫里的函式拷貝到呼叫的地方,呼叫一次拷貝一次;

——》對應實驗現象:mv liabadd.a ../之後,./a.out是可執行的。

對於動態庫,鏈結器是在呼叫的地方做個「標記」,呼叫的時候再去動態庫裡面進行載入

——》對應的實驗現象:mv libmath.so ../之後 ,./a.out 是不可執行的

3.鏈結動態庫的可執行檔案一般比靜態庫的可執行檔案要小

4.預設的鏈結方式為動態鏈結,如果要靜態鏈結的話加個引數 -static

linux 靜態庫動態庫封裝問題

在linux下類庫主要有靜態庫和動態庫兩種庫,首先呢,就說說這兩種庫的差異 靜態庫 在程式連線的時候會自動的連線到程式裡,所以一但編譯完成,靜態庫也就不需要了。靜態庫通常以.a結尾。例如 libutil.a libuuid.a libz.a等。動態庫 在程式編譯時並不會被連線到目標 中,而是在程式執...

c 動態庫封裝及呼叫(1 動態庫介紹)

1 乙個程式從原始檔編譯生成可執行檔案的步驟 預編譯 編譯 彙編 鏈結 1 預編譯,即預處理,主要處理在源 檔案中以 開始的預編譯指令,如巨集展開 處理條件編譯指令 處理 include指令等。2 編譯過程就是把預處理完的檔案進行一系列詞法分析 語法分析 語義分析以及優化後生成相應的彙編 檔案。3 ...

LINUX eclipse 動態庫封裝設計

linux eclipse環境下 任務 將編寫的ptz 封裝成動態庫,重新來看,遇到的錯誤很多都是沒有必要的,可能是因為一些基本的過程沒弄好,所以才會各種錯誤,現在整理乙個折騰之後的過程,a.生成 so 動態庫檔案,新建乙個 share object c 工程檔案 新建c project share...