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