靜態函式庫與動態函式庫的設計

2021-07-01 20:06:12 字數 991 閱讀 5008

函式庫存放位置:

linux應用程式使用的主要函式均放在/lib和/usr/lib目錄下,其中採用*.so.*命名的是動態函式庫,而以*.a方式命名的是靜態函式庫。

靜態函式庫的特點:

* 程式所要用到的庫函式**在鏈結時全部被copy到程式中。

* 導致的問題:如果有多個程序在記憶體中同時執行,並且使用了相同的函式庫,那麼就會有多份拷貝,造成了空間的浪費。

1. linux下進行鏈結時,預設採用的是動態鏈結

gcc test.c -o test

readelf -d test

可以看到shared library: [libc.so.6]為動態庫

2. 如果需要使用靜態庫,需要加入編譯選項 -static ,例如:

gcc -static test.c -o test
rhel6預設不提供靜態函式庫,因此需要手動安裝

rpm -ivh glibc-static-2.12-1.80.el6.i686.rpm
1. gcc -c mylib.c -o mylib.o

2. ar cqs libmylib.a mylib.o

3. 複製libmylib.a到/usr/lib

gcc test.c -lmylib -o test    /*函式庫為libmylib.a*/
1. gcc -c mylib.c -o mylib.o

2. gcc -shared -fpic mylib.o -o libmylib.so

3. 將製作好的libmylib.so複製到/usr/lib下

-fpic 使輸出的物件模型是按照可重定位位址方式生成的

-shared指明產生動態鏈結庫

-c只編譯不鏈結

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的靜態函式庫和動態函式庫

一 在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應用開發 靜態函式庫和動態函式庫

什麼叫庫?就是一些函式經過一定的操作生成的可執行的二進位制檔案,能夠被外部呼叫使用封裝的函式。linux應用程式所使用的主要函式庫均存放於 lib和 usr lib目錄下,其中以 so方式命名的是動態函式庫,以 a命令的是靜態函式庫,linux下進行鏈結時預設使用動態函式庫,如果想要使用靜態函式庫時...