Linux應用開發 靜態函式庫和動態函式庫

2021-08-10 19:12:59 字數 1000 閱讀 5782

什麼叫庫?就是一些函式經過一定的操作生成的可執行的二進位制檔案,能夠被外部呼叫使用封裝的函式。

linux應用程式所使用的主要函式庫均存放於/lib和/usr/lib目錄下,其中以*.so方式命名的是動態函式庫,以*.a命令的是靜態函式庫,linux下進行鏈結時預設使用動態函式庫,如果想要使用靜態函式庫時使用-static編譯選項即可,比如:gcc -static hello.c -o hello

一、靜態函式庫和動態函式庫

1、在使用靜態函式庫時,我們需要的庫都將會編譯到程式當中,程式執行時就不再需要鏈結外部的函式庫了。在應用程式中,靜態函式庫有多份函式庫的拷貝,意思就是每使用乙個靜態函式庫裡的函式呼叫都會生成乙個函式庫的副本,這樣就導致應用程式比較大,比較浪費空間。

2、動態函式庫,又叫共享庫,它使得可執行檔案中不再需要包含公用的函式庫,而只需在所有程序都可以引用的儲存區中儲存這種函式庫的乙個副本並沒有編譯進入程式本身,所以和靜態函式庫不一樣,程式中只有乙份函式庫的拷貝,減少了程式空間,尤其是在一些通用的功能使用中,比如讀寫檔案,但是增加了執行時間,增加的時間體現在第一次使用函式庫時的開銷。

二、函式庫的製作

1、製作靜態函式庫

靜態函式庫的製作分為三步:

gcc -c libname.c -o libname.o

ar cqs liblibname.a libname.o

將製作好的liblibname.a複製到/usr/lib中

2、製作動態鏈結庫

gcc -c libname.c -o libname.o

gcc -shared  -fpic libname.o -o libname.so

將製作好的函式庫複製到/usr/lib中

-shared指明產生動態鏈結庫

3、如何使用:

gcc編譯器在鏈結時預設只會鏈結c函式庫,要想使用其他函式庫時需要加入編譯選項-l顯示指明某個庫需要鏈結

如:gcc  thread.c  -o  thread  -lpthread,執行緒函式需要鏈結執行緒庫pthread

Linux的靜態函式庫和動態函式庫

一 在linux中,有兩種函式庫,以 so字尾命名的是動態函式庫,以 a字尾命名的是靜態函式庫 二 靜態函式庫 1 靜態函式庫是多個目標檔案 o的集合 2 可以使用ar命令 archiver 來生成.a檔案 gcc c part a.c gcc c part b.c ar r libtest.a p...

Linux 下的靜態(函式)庫 動態(函式)庫

不用指定生成.o檔名 預設生成file1.o,file2.o,file3.o ar rv libname.a file1.o file2.o file3.or 將flie1.o,file2,o,file3.o插入archive,如故原先archive中已經存在某檔案,則先將該檔案刪除。v 顯示ar操...

linux下構建 靜態函式庫 a

一.靜態庫構建 1.定義兩個函式檔案 say.c include void say char arg write.c include void write char arg 2.編譯這兩個檔案 gcc c say.c write.c 產生say.o write.o c作用是阻止編譯器建立乙個完整的程...