Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我不能安装一个共享库的多个版本?

为什么我不能安装一个共享库的多个版本?
EN

Unix & Linux用户
提问于 2015-06-14 20:58:44
回答 2查看 13K关注 0票数 14

在某些情况下,某个程序将依赖库版本x.y,而另一个依赖于x.z,但据我所知,没有一个包管理器允许我同时安装x.y和x.z。有时,它们将允许两个主要版本(如qt4和qt5,它们可以同时安装),但(似乎)绝不允许小版本。

为什么会这样呢?正如所述,什么是阻止它的限制因素?我想一定有一个很好的理由不允许这种看似有用的功能。例如,难道没有字段来说明加载共享对象时要加载的版本,因此Linux不知道如何决定加载哪个版本?还是真的没有理由这么做?就像所有的小版本都应该是兼容的吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2015-06-14 21:29:06

实际上,如果一个共享库运行正常,您可以安装多个版本的共享库。

共享库通常命名如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lib<name>.so.<api-version>.<minor>

接下来,有指向库的符号链接,名称如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lib<name>.so
lib<name>.so.<api-version>

当开发人员链接到库以生成二进制文件时,链接器找到的是以.so结尾的文件名。对于任何给定的<name>,一次只能安装一个库,但这只意味着开发人员不能同时针对多个不同版本的库。对于包管理器,这个.so符号链接是单独的-dev包的一部分,只有开发人员才需要安装。

当链接器找到一个以.so结尾的文件并使用它时,它会在库中查找一个名为soname的字段。soname建议链接器将什么文件名嵌入到生成的二进制文件中,从而建议在运行时查找什么文件名。奏鸣曲应该设置为lib<name>.so.<api-version>

因此,在运行时,动态链接器将查找lib<name>.so.<api-version>并使用它。

其意图是:

  • <minor>升级不会改变库的API,当<minor>被转到更高的版本时,让所有二进制文件升级到新版本是安全的。因为二进制文件都在寻找lib<name>.so.<api-version>名称下的库(这是一个指向最新安装的lib<name>.so.<api-version>.<minor>的符号链接),所以它们得到了升级。
  • <api-version>升级会改变库的API,让现有的二进制应用程序使用新版本是不安全的。在<api-version>被更改的情况下,由于这些应用程序正在查找名称lib<name>.so.<api-version>,但是对于<api-version>有不同的值,因此它们将不会获取新版本。

包管理器通常不会在同一个发行版中打包同一库的多个版本,因为整个发行版,包括使用库的所有二进制文件,通常都是在发行版发布之前编译成使用每个库的一致版本的。确保所有内容都是一致的,并且发行版中的所有内容都与其他内容兼容,对于发行商来说,这是工作量的很大一部分。

但是,如果您已经将系统从一个版本升级到另一个版本,并且仍然有一些较旧的包需要旧版本的库,那么您很容易获得多个版本的库。示例:

  • libmysqlclient16来自一个较老的Debian,包含libmysqlclient.so.16.0.0和符号链接libmysqlclient.so.16
  • libmysqlclient18来自当前Debian,包含libmysqlclient.so.18.0.0和符号链接libmysqlclient.so.18
票数 18
EN

Unix & Linux用户

发布于 2015-06-14 21:31:15

这种功能并不是不允许的,只是由于大多数库的编号工作方式以及包名更改带来的不便,这种功能并不常见。

如果使用虚线版本号方案X.Y.Z。“微”版本Z经常在错误修复上更改,则“次要”号Y在向后兼容的更改上更改,而“主”版本号X必须更改API更改(有时还会更改主要额外功能)。

不应该有任何理由不希望修复最新的bug,并且向后兼容的更改也不应该破坏您的软件。

如果库是这样开发的,那么应该始终能够用X(Y+m).(Z+n)替换X.Y.Z。对于任意给定的m和n,您应该总是能够用同一大数列中的最新版本替换您的库。如果库开发人员非常小心,并且下一个主要数字是兼容的(例如,宣布放弃推荐的内容,但尚未删除它们),您甚至可以使用下一个主要数字。

对于包开发人员来说,这意味着他们可以只使用一个名称,甚至没有数字名称,只需更新包就可以给出最新的版本。如果他们在一个包abc2中发布了一个库,那么他们必须通过循环来移动他们自己的软件,这些软件依赖于abc2来升级来使用abc3,有时还带有转换包。如果库中的主版本号适用于大多数依赖的包,则省略主版本号更为方便。因此,即使abc2abc3在发行版中的某个时刻都是可用的,abc3也经常被称为abc (就像还没有abc3时调用abc2一样),并且一旦发行版中没有依赖于abc2的包,就有可能完全放弃abc2

编号计划并非一视同仁,但我只能想象,随着互联网的到来,传播有关如何使用这类方案的信息,以及图书馆用户(包括发行版开发人员)施加压力,使诸如向后兼容性等重要事项变得清晰,而不必阅读库中包含的更改文件,这些都使这种情况变得更加普遍。

一个反例,但不是库的例子是python,它不兼容它的共享对象和一个小的数字变化的酸洗格式。因此,您将看到python的包( 2.7系列中的最新包)和python3 (当前python3.4系列中的最新包),以及python2.6(不太常见)和python3.3的显式包。

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

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

复制
相关文章
node+express构建后端项目
项目启动后,在浏览器就可以访问了localhost:3000,访问成功会出现以下页面
程序员不务正业
2019/09/29
1.3K0
《Node.js+Express+Vue项目实战》-- 1.安装和使用Express(笔记)
Express 是一个精简、灵活的 Node.js 的 Web 应用程序开发框架,为 Web 和移动应用程序提供了一组强大的功能,使用 Express 可以快速地开发一个 Web 应用。
爱学习的程序媛
2022/04/07
4.3K0
《Node.js+Express+Vue项目实战》-- 1.安装和使用Express(笔记)
TypeScript在node项目中的实践
TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法。 最近的一个新项目开始了TS的踩坑之旅,现分享一些可以借鉴的套路给大家。
贾顺名
2019/12/09
1.7K0
TypeScript在node项目中的实践
使用 Node.js 和 Express.js 搭建简易 HTTP/2 服务器
自从 1975 年左右使用 TCP/IP 协议的现代互联网诞生至今已经过了惊人的41年了。在它生涯的大部分时间里,我们使用 HTTP 以及它的继任者 HTTP/1.1 (1.1 版本) 在客户端和服务器之间进行通讯。它很好的支撑起了这个网络世界,但是开发者们构建网站的方式发生了巨大的变化。现在有无数的外部资源、图片、CSS 文件和 JavaScript 文件。这些资源的数量只增不减。
疯狂的技术宅
2019/03/27
2.9K0
使用 Node.js 和 Express.js 搭建简易 HTTP/2 服务器
node.js + express 后端项目小坑
PROTOCOL_CONNECTION_LOST PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR
程序员不务正业
2020/02/18
1.5K0
node Express 框架
Express事实上Node内置的http模块上构建的一层抽象。理论上所有Express实现的功能都能用Node实现
mySoul
2018/07/29
5.3K0
Node.js 项目 TypeScript 改造指南
如果你有一个 Node.js 项目,并想使用 TypeScript 进行改造,那本文对你或许会有帮助。
五月君
2019/12/06
8.4K0
Node.js 项目 TypeScript 改造指南
Node.js项目TypeScript改造指南
如果你有一个 Node.js 项目,并想使用 TypeScript 进行改造,那本文对你或许会有帮助。
coder_koala
2019/12/05
4.6K0
使用Typescript开发node.js项目
typescript 通过构造函数的参数直接定义属性,为了证明,我们创建一个info.ts文件 内容如下
lilugirl
2019/05/28
2.6K0
Node.js项目TypeScript改造指南
如果你有一个 Node.js 项目,并想使用 TypeScript 进行改造,那本文对你或许会有帮助。
WecTeam
2019/12/24
4.4K0
如何运行github上面的node+express项目
在学习过程之中,除了看完教程之外,我们还需要完成一个重要的步骤,那就是做一个项目来巩固和联系,就像是学生时代那般,上完课是要找作业来练习加深印象是一个道理。
王小婷
2019/03/04
1.2K0
如何运行github上面的node+express项目
node框架express的研究
在node中,express可以说是node中的jQuery了,简单粗暴,容易上手,用过即会,那么我们来试一下怎么实现。下面我们基于4.16.2版本进行研究
lhyt
2022/09/21
9560
node框架express的研究
Node.js 项目 TypeScript 改造指南(二)
最近笔者把一个中等规模的 Koa2 项目迁移到 TypeScript,和大家分享一下 TypeScript 实践中的经验和技巧。
WecTeam
2019/12/26
3.6K0
Node | Express简单使用
express提供了一个非常好用的函数,叫做express.static(),通过它,我们可以非常方便地创建一个静态资源服务器,例如,通过如下代码就可以将static目录下的图片、CSS文件、JavaScript 文件对外开放访问了:
倾盖
2022/08/16
1K0
Node | Express简单使用
Node.js + express 的使用
变化的路由 我们再访问服务器时描绘涉及到许许多多的路由,这是我们不可能将他们都一一列举出来,所以我们就可以用 ‘ :’ 来解决,如下:
圆号本昊
2021/09/24
2.7K0
Node + Express + Mysql的CMS小结
因为之前用过上述的组合完成过很多系统,而这一次是为了实现一个帮助系统的静态网页发布。因为很久不写,重点说遇到的几个坑:
meteoric
2018/11/19
1.5K0
Vue.js + Node.js + Express + MySQL示例:构建全栈CRUD应用程序
上次修改时间:2020年10月16日 bezkoder Full Stack,Node.js,Vue.js
ccf19881030
2020/11/10
25.1K0
Vue.js + Node.js + Express + MySQL示例:构建全栈CRUD应用程序
express:node throwing error on mongodb
与此类似node throwing error on mongodb,一直报Db.open那里出错,查源代码,发现应该是有err参数传入,因为之前从来没接触过mongodb--在某些文章中看到稍微有些了解,觉得是不是没有安装mongodb的问题呢?试了一下,果然如此。
meteoric
2018/11/16
5390
Express,Sequelize和MySQL的Node.js Rest API示例
本文翻译自Node.js Rest APIs example with Express, Sequelize & MySQL
ccf19881030
2020/11/10
12.7K0
Express,Sequelize和MySQL的Node.js Rest API示例
一种不错的 BFF Microservice GraphQL/REST API 层的开发方式
云原生(Cloud Native)Node JS Express Reactive 微服务模板 (REST/GraphQL) 这个项目提供了完整的基于 Node JS / Typescript 的微服务模板,包括生产部署、监控、调试、日志记录、安全、CI/CD 所需的所有功能。还添加了基于响应性扩展的示例,以演示如何将其用于构建微服务 API 边缘服务(edge-service)、前端的后端(BFF)或将其用作构建任何类型微服务的基础。
为少
2021/05/27
2.4K0
一种不错的 BFF Microservice GraphQL/REST API 层的开发方式

相似问题

微软认可的带有node/express的TypeScript入门项目没有任何类吗?

10

设置node.js & express项目

115

TypeScript与现有Node js express项目的集成

112

为Node/Express/类型记录和Node设置一个项目

20

使用typescript项目设置node.js

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文