Linux下建立和使用靜態和動態庫

2021-08-26 21:40:59 字數 1218 閱讀 3494

一.建立靜態庫與使用:

(建立靜態庫):

1.編寫源**。這個可以想像成是一種服務或一種函式,它可以為別的程式提供服務。

2.生成目標檔案:gcc -c ***x.c -o ***x.o(注意,這裡是用-c選項來編譯)

3.使用ar命令建立靜態庫: ar rc lib***.a ***x.o

說明:lib***.a是你想要建立靜態庫的名字,根據習慣在linux下庫名稱是以lib開頭的,以.a結尾的表示是靜態庫。***x.o則是以這個目標檔案來生成靜態庫。

(使用靜態庫):

1.使用靜態庫需要獲得兩個檔案:標頭檔案:***x.h, 和靜態庫檔案:lib***x.a

2.在編譯其他原始檔(一些需要使用靜態庫中所提供的函式或服務的原始檔)編譯時使用:

gcc -o final ***.c lib***x.a

二。建立動態庫(也稱為共享庫)與使用:

(建立動態庫):

1.用 gcc 和 -fpic 引數將原始檔**編譯成.o的目標**,這個選項生成的**與位置無關,可以在任何位址被連線和裝載。如:gcc -fpic -wall -g -c ***.c -o ***.o

2.使用-shared來建立共享庫,使用以下命令及引數:

gcc -g -shared -w1,-soname,lib***.so.1.0.0 -o lib***x.so.1.0.0 ***xx.o

說明:-soname,lib***.so.1.0.0:說明soname為「lib***.so」版本為1.0.0

注意:-w1:那個是數字1

3.建立soname連線。因為前面定義的soname為"lib***.so",因此需要建立乙個"lib***.so"到"lib***.so.1.0.0"的連線:

ln -sf lib***.so.1.0.0 lib***.so

(使用共享庫):

1.需要三個檔案:標頭檔案***.h, 庫檔案:lib***.so.1.0.0 及其鏈結lib***.so

2.編譯:gcc -wall -g -c ***.c -o ***.o

3.連線引用動態庫:gcc -g -o final ***.o -l ./ -l***[這裡的-l***是引用其共享庫的名字,它是lib***.so.1.0.0的縮寫]

4.執行:注意,執行時需要指定庫的搜尋路徑,它由乙個環境變數:ld_library_path指定!

ld_library_path=$(pwd) ./final

Linux下靜態庫和動態庫的建立和使用

由於windows和linux的平台不同 主要是編譯器 彙編器和聯結器的不同 因此二者庫的二進位制是不相容的 本文僅僅介紹linux系統下的庫。庫就是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執...

Linux下的靜態庫和共享庫的建立和使用

靜態庫的建立和使用 共享庫的建立及使用 第一次 從 usr lib下可以看出共享庫應該是藍色字型或是綠色字型,而我第一次建立的共享庫卻是黑色字型,顯然不對,我又重新做了一遍 第二次 這一次雖然建立好了libfoo.so,但是不能使用,找不到共享庫?我又做了第三次 第三次 我先將切換到管理員,然後 m...

linux 靜態庫的建立和使用

linux和windows一樣也有自己的庫檔案,這樣可以使程式模組化。windows系統包括靜態鏈結庫 x.lib檔案 和動態鏈結庫 x.dll檔案 linux 庫檔案包括靜態庫檔案 lib x.a檔案 和動態鏈結庫 x.so檔案 本文重點介紹linux系統中的庫檔案的建立與使用 在linux系統中...