簡體   English   中英

鏈接不帶版本的共享庫

[英]Linking with a shared library without version

幾個月前,我在debian上構建了一個使用libxml2作為共享庫的C軟件。 我創建了一個.deb文件來安裝該軟件,Ubuntu用戶可以使其運行。

今天,最新版本的Ubuntu具有更高版本的libxml2。 因此,現在該軟件無法運行,它要求使用libxml2的先前版本,並且使其運行的唯一方法是在鏈接到新版本的libxml2時構建該軟件。

所以我的問題是,是否可以在不要求特定版本的情況下鏈接到共享庫(冒該軟件無法在某些版本上運行的風險)?

如果不是,那么如果您不能在任何Linux發行版上部署軟件,那么與共享庫鏈接的真正優勢是什么?

感謝幫助。

最好的問候,文森特。

大多數共享庫將具有嵌入式SONAME SONAME用於指示二進制兼容性。 例如,libxml2.so.2.7.8的嵌入式SONAME為libxml2.so.2:

readelf -Wa libxml2.so.2.7.8 | grep SONAME
0x000000000000000e (SONAME)             Library soname: [libxml2.so.2]

如果出現libxml2.so.2.7.9,則它可能仍與v2.7.8二進制兼容,並且仍具有libxml2.so.2的SONAME ,並且您的應用程序可以正常工作。 僅當引入了破壞二進制兼容性的更改時, SONAME增加,從而破壞您的應用程序。

如果要創建一個可以在所有發行版上自動運行的軟件包,一種方法是提供自己的libxml2版本,然后修改LD_LIBRARY_PATH ,以自動加載您的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM