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