binary hacks读数笔记(共享库)
共享庫從文件結(jié)構(gòu)上來講,與共享對象沒什么區(qū)別。Linux下,共享庫就是普通的ELF共享對象。
1、共享庫命名:
libname.so.x.y.z :其中最前面使用前綴lib,中間是庫的名字和后綴“so”。最后三個數(shù)字組成的是版本號。其中,“x”表示主版本號,“y”表示次版本號,"z"表示發(fā)布版本號。
2、SO-NAME:
共享庫主版本號與次版本號決定了一個共享庫的接口。對于Linux系統(tǒng)來說,普遍采用一種叫做SO-NAME的命名機(jī)制來記錄共享庫依賴關(guān)系。每個共享庫都有一個對應(yīng)的"SO-NAME"。這個SO-NAME即為共享庫的文件名去掉次版本號和發(fā)行版本號,保留主版本號。比如一個共享庫為libfoo.so.2.6.1,那么它的SO-NAME為libfoo.so.2。在linux系統(tǒng)中,系統(tǒng)會為每個共享庫在它所在目錄創(chuàng)建一個跟SO-NAME相同的并且指向它的軟鏈接。以SO-NAME創(chuàng)建的軟鏈接會指向目錄中主版本號相同、次版本號和發(fā)行版本號最新的共享庫。
3、鏈接名:
當(dāng)我們在編譯使用共享庫時,為了使用的簡潔,比如鏈接一個libXXX.so.2.6.1共享庫,只需要在編譯相關(guān)命令中指定-lXXX即可。編譯器會根據(jù)當(dāng)前環(huán)境,在系統(tǒng)相關(guān)路徑(往往由-L參數(shù)指定)查找最新版本"XXX"庫。
“XXX”又稱為共享庫鏈接名。不同類型的庫可能會有同樣的類型名。例如靜態(tài)庫libc.a與動態(tài)庫libc.so.2.6.1。因而利用ld的-static參數(shù)時,“-lc”會查找到libc.a; 若使用-Bdynamic? “-lc”則會查找到libc.so.2.6.1。
4、共享庫路徑:
一般一個系統(tǒng)中主要有3個存放共享庫的路徑。
a、/lib 這個位置主要存系統(tǒng)最關(guān)鍵和基礎(chǔ)的共享庫。比如動態(tài)鏈接器、c語言運(yùn)行庫等
b、/usr/lib 這個位置主要放一些非系統(tǒng)運(yùn)行時所需關(guān)鍵庫。
c、/usr/local/lib 這個目錄位置放置一些與系統(tǒng)本身并不十分相關(guān)的庫。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wsw-seu/p/10655707.html
總結(jié)
以上是生活随笔為你收集整理的binary hacks读数笔记(共享库)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20190404 Oracle忘记登陆密
- 下一篇: 12.dateformat常用格式