一、動態(tài)庫的版本號
libxxx.so.x.y.z:動態(tài)庫必須以lib開頭,xxx為其庫名,so表示其是動態(tài)庫,x是主版本號,y是次版本號,z是發(fā)布版本。
主版本之間不做兼容性要求
次版本和發(fā)布版本需要互相兼容。
二、FHS中的動態(tài)庫
FHS相關科普
/lib:系統(tǒng)啟動時需要的庫和一些非常重要的庫如C語言庫,動態(tài)鏈接庫(),數(shù)學庫等。
/usr/lib:開發(fā)時用到的共享庫。
/usr/local/lib:第三方應用程序的庫,如python。
三、共享庫的搜索
默認路徑:/lib,/usr/lib,/etc/ld.so.conf配置的路徑。這些默認的路徑通過運行l(wèi)dconfig程序會生成ld.so.cache文件。查找動態(tài)庫時會通過ld.so.cache文件加速。
環(huán)境變量-LD_LIBRARY_PATH:可配置應用程序搜索共享庫的路徑。
環(huán)境變量-LD_PRELOAD:應用程序啟動前必然會加載該路徑下的動態(tài)庫,無論應用程序是否依賴。
環(huán)境變量-LD_DEBUG:打開動態(tài)鏈接器的調(diào)試功能,輸出鏈接時的日志。
加載的優(yōu)先級:LD_PRELOAD > LD_LIBRARY_PATH > /ect/ld.so.conf配置的路徑 > /usr/lib > /lib。
四、共享庫的加載
共享庫可創(chuàng)建構造函數(shù)和析構函數(shù)文件,分別在加載和卸載動態(tài)庫時調(diào)用。通過attribute((constructor))將函數(shù)指定為共享庫的構造或析構函數(shù)。