Linux下靜態庫 a與 so庫檔案的生成與使用

2021-09-29 09:27:05 字數 2076 閱讀 5334

1、靜態庫.a檔案的生成與使用。1.1、生成目標檔案(***.o)

1.2、生成靜態庫.a檔案

1.3、使用.a庫檔案,建立可執行程式(若採用此種方式,需保證生成的.a檔案與.c檔案儲存在同一目錄下,即都在當前目錄下)

---> gcc -o test test.c libafile.a

---> ./test

2、共享庫.so檔案的生成與使用

2.1、生成目標檔案(***.o)(此處生成.o檔案必須新增"-fpic"(小模式,**少),否則在生成.so檔案時會出錯

---> gcc -c -fpic a1.c  a2.c

2.2、生成共享庫.so檔案

---> gcc -shared *.o -o libsofile.so

2.3、使用.so庫檔案,建立可執行程式

---> gcc -o test test.c libsofile.so

---> ./test

發現出現錯誤:

./test: error while loading shared libraries: libsofile.so: cannot open shared object file: no such file or directory

執行ldd test,檢視鏈結情況

ldd test

linux-vdso.so.1 =>  (0x00007fff0fd95000)

libsofile.so => not found

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f937b5de000)

/lib64/ld-linux-x86-64.so.2 (0x0000563f7028c000)

發現確實是找不到對應的.so檔案。

這是由於linux自身系統設定的相應的設定的原因,即其只在/lib and /usr/lib下搜尋對應的.so檔案,故需將對應so檔案拷貝到對應路徑。

--->sudo cp libsofile.so /usr/lib

再次執行./test,即可成功執行。

---> ./test

同時可直接使用gcc -o test test.c -l. -lname,來使用相應庫檔案

其中,-l.:表示在當前目錄下,可自行定義路徑path,即使用-lpath即可。

-lname:name:即對應庫檔案的名字(除開lib),即若使用libafile.a,則name為afile;若要使用libsofile.so,則name為sofile)。

Linux下動態庫 so 和靜態庫 a

一般情況下,在專案裡會把功能相似的 封裝成庫,方便使用和管理,同時增加了 的內聚性。庫分為兩種,一種為靜態庫,檔名以.a結尾,另一種是動態庫,檔名以.so結尾。靜態庫和動態庫的使用各有利弊。靜態庫的特點 動態庫的特點 現在用乙個微型的工程,來講述靜態庫 動態庫的生成和使用。假設有3個.c檔案,分別為...

Linux下編譯靜態庫 a 和動態庫 so

靜態庫 在linux環境中,使用ar命令建立靜態庫檔案.如下是命令的選項 d 從指定的靜態庫檔案中刪除檔案 m 把檔案移動到指定的靜態庫檔案中 p 把靜態庫檔案中指定的檔案輸出到標準輸出 q 快速地把檔案追加到靜態庫檔案中 r 把檔案插入到靜態庫檔案中 t 顯示靜態庫檔案中檔案的列表 x 從靜態庫檔...

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...