Linux中的.so文件 是動態(tài)鏈接的產(chǎn)物
共享庫理解為提供各種功能函數(shù)的集合,對外提供標(biāo)準(zhǔn)的接口
Linux中命名系統(tǒng)中共享庫的規(guī)則
主版本號:不同的版本號之間不兼容
次版本號:增量升級 向后兼容
發(fā)行版本號:對應(yīng)次版本的錯誤修正和性能提升,不影響兼容性
Linux中的共享庫并不都是這樣的格式
比如GLibc的共享庫命名為:libc-x.y.z.so
動態(tài)鏈接器也是GLibc的一部分,使用ld-x.y.z.so命名
libm(數(shù)學(xué)庫)等
SO-NAME機制
系統(tǒng)和程序中要鏈接的共享庫的格式一般為:libname.so.x
一般是一個紙箱系統(tǒng)中主版本號相同、次版本號最高的同名共享庫,目的是保證在兼容的前提下使用最新的版本
在可執(zhí)行文件(Linux中為ELF文件)的相關(guān)字段中保存的就是SO-NAME
當(dāng)共享庫升級的時候,有一下兩種情況:
1)主版本號不變,說明共享庫只是做了增量升級(保證原來的所有都不改變,在此基礎(chǔ)上添加新的接口),并不影響原先的程序運行的正確性
此時,原來的版本不需要存在,所有用新的共享文件庫文件替換現(xiàn)有的老版本(次版本號比較低的)文件,然后運行l(wèi)dconfig[后文會講]就可以了
2)主版本號改變,此時升級的時候需要保留原來的老版本的共享庫(為了兼容原來以來此版本共享庫的可執(zhí)行程序),同時需要保存新的版本的共享庫
Linux中的ldconfig
當(dāng)系統(tǒng)中安裝或者更新一個共享庫的時候需要更新軟鏈接和動態(tài)鏈接器查找文件
所以應(yīng)該及時運行l(wèi)dconfig
ldconfig的作用就是遍歷所有的保存共享庫的目錄/lib /usr/lib等,根據(jù)實際的共享庫的版本更新軟鏈接
在GCC編譯的時使用共享庫的形式比較簡單,并不需要拼寫SO-NAME等
gcc -o hello hello.c -lNAME
利用上面的形式便可以鏈接到 libNAME.so.x.y.z(系統(tǒng)中的版本)
動態(tài)鏈接器按照下列順序依次裝載或者查找共享對象
1)由環(huán)境變量 LD_LIBRARY_PATH指定的路徑
2)由路徑緩存文件/etc/ld.so.cache指定的路徑
3)默認(rèn)共享目錄 先/usr/lib 再/lib
其中LD_LIBRARY_PATH是一個環(huán)境變量,當(dāng)指定某個程序的LD_LIBRARY_PATH時
動態(tài)鏈接器在查找共享庫的時候,會首先從指定的路徑開始查找
【本文標(biāo)簽】: 多層 pcb 多層PCB面板 沉金板 公司設(shè)備
【責(zé)任編輯】:鼎紀(jì)電子PCB??? 版權(quán)所有:http://ai-hots.com/轉(zhuǎn)載請注明出處
掃一掃更精彩!
2001-2018 深圳鼎紀(jì)電子有限公司 版權(quán)所有
粵ICP備16081348號
全國服務(wù)熱線:0755-27586790
24小時銷售熱線:18025855806|18682125228
地址:深圳市寶安區(qū)西鄉(xiāng)黃崗嶺工業(yè)區(qū)灣區(qū)人工智能產(chǎn)業(yè)園B棟605
深圳鼎紀(jì)電子有限公司:單面PCB板