首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在同一个linux系统上管理多个库?

如何在同一个linux系统上管理多个库?
EN

Unix & Linux用户
提问于 2017-04-14 04:53:22
回答 1查看 1.4K关注 0票数 2

我只有一台装有Linux的PC。但是,我有多个版本的相同的库。因为不同的软件可能依赖于同一库的不同版本,所以我必须将它们全部保存在系统上。

你有什么好主意能让他们正常工作吗?

欢迎任何推荐人。

更新

例如:

我有两个版本的g++,例如g++4.8和g++5.2。

我希望它们的相关文件存储在不同的路径中,如:/soft/g++/4.8//soft/g++/5.2

当我使用g++时,我可以通过一个简单的命令轻松地更改版本。我发现了软件环境管理http://modules.sourceforge.net/

EN

回答 1

Unix & Linux用户

发布于 2017-04-14 07:00:41

如果您的库正确地定义了它的索纳姆,那么您可以安装多个版本,而不会有任何困难。例如,我目前安装了三个版本的libreadline

代码语言:javascript
复制
$ ls -l /lib/x86_64-linux-gnu/libreadline.so.*
lrwxrwxrwx 1 root root     18 Dec  4  2015 /lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 263352 Dec  4  2015 /lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root     18 Oct  4  2016 /lib/x86_64-linux-gnu/libreadline.so.6 -> libreadline.so.6.3
-rw-r--r-- 1 root root 296792 Oct  4  2016 /lib/x86_64-linux-gnu/libreadline.so.6.3
lrwxrwxrwx 1 root root     18 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 309168 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7.0

这是因为程序链接到奏鸣曲,所以任何为版本5链接构建的链接都是针对libreadline.so.5的,任何为版本6链接构建的链接都是针对libreadline.so.6构建的。库方面的要求是,所有具有相同soname的版本都必须保留它们的ABI:新版本可以添加特性,但不能破坏现有的功能。任何破碎的改变都意味着奏鸣曲的撞击。

如果所有这些操作都是正确的(在库端),那么您就不应该需要一个具有相同名称的库的多个版本:只要您有最新版本,就可以使用相同的奏鸣曲运行任何针对库的任何版本构建的软件。继续使用libreadline示例,使用库的5.1版构建的软件在版本5.2中运行良好。(相反的情况并不一定是正确的;使用5.2中新特性的软件不会运行5.1。)

如果您还没有使用libtool (是的,我知道),那么它可能值得一看:它有一个可以合理使用的版本控制方案,可以处理soname凸起。

有些库不遗余力地减少对soname凸起的需求;GNU C库就是一个例子,它广泛使用符号版本来避免破坏ABI,同时仍然引入新特性和向后不兼容的更改(它只是将旧版本保存在库中)。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/358940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档