如何在 archlinux 中保留同一个包的两个版本?

如何在 archlinux 中保留同一个包的两个版本?

我正在运行Archlinux。最近,其中一个名为的软件包icu得到了更新;然而,Firefox 依赖于libicuuc.so.56,而 R 依赖于libicuuc.so.55。我怎么解决这个问题?

注意:R 包是针对Intel MKLlibiary 构建的,因此它不适用于新版本的依赖项。我尝试重建 R ——它仍然依赖于旧的libicuuc.so.55

答案1

我假设您希望使用旧库运行特定的可执行文件。让我们调用可执行文件myprogram

libicuuc.so.55例如,如果您放置在不同的目录中,则/opt/oldlibs/libicuuc.so.55可以myprogram通过如下命令指示使用旧库:

LD_LIBRARY_PATH=/opt/oldlibs myprogram

库文件可以从包文件中提取(您可能可以在 参考资料中找到/var/cache/pacman/pkg)。

如果这不能解决您打算如何使用应用程序的问题,您可以考虑在受限环境(使用chroot)或容器中运行它。

答案2

我使用 arch linux 的经验

systemctl start mongodb 给出进程启动错误

我只是简单地击中 日志控制-xe检查当前日志

它显示缺少 libboost_system.so.1.64.1 (旧的)

这是一个 sumlink 我用它来解决它

readlink -f /lib/libboost_system.so.1.65.1  (new one)

readlink 告诉我符号链接指向 /usr/lib/libboost_system.so.1.65.1

我从 /var/cache/pacman/pkg 中提取 boost-libs 1.64 并将其所有 /lib 文件也粘贴到 /usr/lib跳过以覆盖旧文件

这解决了我打破依赖关系的进一步工作,如果不能解决,则创建一个缺少的符号链接,例如

 ln -s /lib/libboost_system.so.1.64.1 /usr/lib/libboost_system.so.1.64.1 

经验获取

不寻找补丁总是使用 pacman -Suy && pacman -S package_name用于安装任何东西。不支持部分更新(在 arch 的情况下)

相关内容