我繼承和維護,這是非常緊密耦合與特定的硬件在Linux共享庫;我們稱之爲libfoo.so.0.0.0
。這個圖書館已經存在了一段時間,並且「剛剛工作」。這個庫現在已經成爲多個高層應用程序的依賴關係。
現在,不幸的是,新的硬件設計迫使我用更寬的類型創建符號,從而導致libfoo.so.0.1.0
。只有補充;沒有刪除或其他API更改。更新符號的原始縮小版本仍以原始形式存在。
此外,我有一個應用程序(說,myapp
),取決於libfoo
。它最初是爲支持庫的0.0.0
版本而編寫的,但現在已被重新編寫以支持新的0.1.0
API。
爲了向下兼容的原因,我希望能夠通過編譯標誌爲舊庫或新庫構建myapp
。給定版本的myapp
將被加載的內核將始終只有一個版本的庫,在編譯時已知。
問題
這很可能libfoo
將在未來再次更新。
在構建
myapp
,是有可能指定最低版本的libfoo
反對基於構建標誌鏈接?我知道可以直接在編譯CLI中指定庫名稱。這是否會導致
myapp
要求恰好爲該版本或將在相同主版本的更高版本的lib仍然能夠鏈接它(例如libfoo.so.0.2.0
)?我真的希望在每次發佈新版次要版本時都不必更新每個依賴應用程序的內部版本。是否有一種更智能的方式來完成這與應用程序無關的方式?
參考
How do you link to a specific version of a shared library in GCC
如果您已經制作了一些符號,僅在較高版本的庫中提供,那麼您不必擔心確切的庫版本;應用程序僅適用於包含所有使用符號的庫的版本。 –
對於第2點,我認爲你想給你的lib一個soname(libfoo.so.0看起來不錯)。 –