linux 版本_Linux动态库版本号作用机制
熟悉linux的都知道,linux的動態(tài)庫如果有版本號的話,一般是libsample.so.x.y.z這樣的名字。
x.y.z對應(yīng)的就是major.minor.release(即主.次.發(fā)布)版本號
Major:大版本更新,前后都不兼容(比如移除api,又新增api)
Minor:小版本更新,一般來說是向前兼容的(即1.2.1是可以用在1.1.0的環(huán)境的)
Release:就是解決內(nèi)部的問題,api沒任何變化。
另外除開libsample.so.x.y.z這個文件,一般還會有兩個文件
libsample.so?->?libsample.so.x.y.z
libsample.so.x?->?libsample.so.x.y.z
libsample.so.x.y.z
其實(shí)前兩個文件都是軟連接到第三個文件的。
首先來看編譯連接時
簡單來說:“是通過一個最容易的名字libsample.so,找到真實(shí)的文件libsample.so.x.y.z,然后取得它的運(yùn)行時名字libsampe.so.x”
直接看圖
編譯連接過程
再來看運(yùn)行加載時
簡單來說“是通過運(yùn)行時名字libsampe.so.x,找到鏈接文件ibsampe.so.x,從而定位真實(shí)文件libsample.so.x.y.z”
運(yùn)行加載過程
兼容,怎么做到的?
假設(shè)運(yùn)行系統(tǒng)目前已經(jīng)有了下面三個文件:
libsample.so????-->libsample.so.1.1.1
libsample.so.1??-->libsample.so.1.1.1
libsample.so.1.1.1
另外一個執(zhí)行文件foo依賴ibsample.so.1?。
兼容升級:
當(dāng)升級libsample.so.1.1.1為libsample.so.1.2.0時,只需要將連接重新指定
libsample.so.1??-->libsample.so.1.1.1???//修改為
libsample.so.1??-->libsample.so.1.2.0?
不用重新編譯foo
不兼容升級:
當(dāng)升級libsample.so.1.1.1為libsample.so.2.0.0時,可以保持原來的狀況不變
libsample.so.1??-->libsample.so.1.1.1
//添加新的文件
libsample.so.2??-->libsample.so.2.0.0
這樣保證,
舊的foo 依賴libsample.so.1.1.1可以繼續(xù)運(yùn)行;
新的foo2依賴libsample.so.2.0.0也可以繼續(xù)運(yùn)行。
還有疑問的話,就在實(shí)際環(huán)境驗(yàn)證吧。
總結(jié)
以上是生活随笔為你收集整理的linux 版本_Linux动态库版本号作用机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七日年化和年化哪个好?3分钟教你弄懂!
- 下一篇: linux串口编程实例_Linux 网络