AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 497105
Accepted
Tyler Durden
Tyler Durden
Asked: 2019-01-28 18:14:35 +0800 CST2019-01-28 18:14:35 +0800 CST 2019-01-28 18:14:35 +0800 CST

如何处理非工作包中的共享库问题

  • 772

我安装了 bind-tools,这是 dnsutils 的 Arch linux 替代品,但没有一个工具可以工作,都失败并出现错误:

host: error while loading shared libraries: libidn2.so.4: cannot open shared object files: No such file or directory

libidn2.so.4 的这个问题似乎是 Arch 包构建的最近问题(2019 年 1 月),并且显然产生了一些非常可怕的结果,比如使整个系统无法启动。

我的问题是:(1)等到bind-tools的维护者修复这个问题,还是自己尝试修复它是正确的方法吗?(2)到底发生了什么?bind-tools 需要 libidn2.so.4 但不安装?维护者怎么可能犯这样的错误?

arch-linux package-management
  • 2 2 个回答
  • 5767 Views

2 个回答

  • Voted
  1. Best Answer
    Ed Grimm
    2019-01-28T19:04:23+08:002019-01-28T19:04:23+08:00

    我不运行 Arch Linux,所以我在这方面有点冒险。

    您链接到的文章表明它是缺少符号链接,而不是缺少包。这是有道理的,因为通常在 Linux 中,共享库在“.so”之后至少有两个八位字节的版本号,而错误只提到一个。

    我的建议是你跑

    ls -l /usr/lib/libidn2.so*
    

    看看它会返回什么。如果它只是返回

    /usr/lib/libidn2.so
    

    并且没有提到更具体的内容,那么我建议运行

    ln -s /usr/lib/libidn2.so /usr/lib/libidn2.so.0
    ln -s /usr/lib/libidn2.so /usr/lib/libidn2.so.4
    

    我建议同时运行两者,因为您的程序似乎正在寻找该库的主要版本 4,但您引用的文章正在寻找主要版本 0。此修复基本上为文件 /usr/lib/libidn2.so 设置了两个别名,一个为 .0,一个为 .4。

    如果您看到有一个 /usr/lib/libidn2.so.something.something,并且 /usr/lib/libidn2.so 是它的符号链接,则符号链接到更具体的文件可能更有意义。我真的不知道哪种方式一定是最好的。

    您的另一种选择是将您的 libidn2 降级到此问题之前的版本。

    至于这是怎么发生的——看起来 Arch Linux 的 libidn2 的维护者犯了一个错误。让我感到困惑的不是这一切都发生了,而是……那个错误是在 12 天前添加的。可以通过一些手动符号链接修复的错误应该需要数小时而不是数周才能修复。我并不是要贬低 Arch Linux 的维护者。我不知道他们那边发生了什么。只是……令人沮丧。我的猜测是,这只是这个故事的冰山一角。无论如何,人就是人,我们都会犯错。有人可能已经为此自责了,他们不需要我们的帮助。

    • 2
  2. eschwartz
    2019-01-30T10:15:14+08:002019-01-30T10:15:14+08:00

    由于这是 Arch Linux 中经常出现的那种错误,我编写了一个专门的脚本来分析包并确定它们是否正确构建。(在 95% 的情况下,Arch Linux 软件包是正确构建的):https ://github.com/eli-schwartz/dotfiles/blob/master/bin/pkg-list-linked-libraries

    在 bind-tools 包上运行它并查找 libidn2 表明最新版本的 bind-tools 链接到 libidn.so.4:

    $ pkg-list-linked-libraries bind-tools libidn2
    ==> checking linked libraries for bind-tools-9.13.5-4-x86_64.pkg.tar.xz ...
    /usr/bin/dig
      NEEDED               libidn2.so.4
    /usr/bin/host
      NEEDED               libidn2.so.4
    /usr/bin/nslookup
      NEEDED               libidn2.so.4
    

    那个库是从哪里来的?

    $ pacman -Qo /usr/lib/libidn2.so.4
    /usr/lib/libidn2.so.4 is owned by libidn2 2.1.0-1
    

    Arch 中的 bind-tools 包需要 libidn2 包作为依赖项,根据 的输出pacman -Si bind-tools,这很好,因为它依赖于它。

    在撰写本文时,官方 Arch Linux 存储库中的两个包的版本对应于我在上面检查过的 bind-tools 和 libidn2 的版本:

    $ expac -S '%n %v' libidn2 bind-tools
    libidn2 2.1.0-1
    bind-tools 9.13.5-4
    

    因此,您显然已经安装了最新版本的 bind-tools。但是您声称您没有二进制文件所需的 libidn2 库。为什么不?您当前安装的 libidn2 版本是什么?检查 的输出pacman -Q libidn2。

    由于该软件包适用于成千上万的其他人,我的结论是您的系统已损坏,您需要正确更新系统才能安装最新版本的 libidn2。请参阅https://wiki.archlinux.org/index.php/System_maintenance#Partial_upgrades_are_unsupported详细了解为什么会发生这种情况、如何​​正确修复它以及为什么符号链接不仅不是解决方案,甚至会破坏您的系统更远。

    至于抛物线错误,这是完全相反的问题。一个完全不同的 Linux 发行版(不是Arch Linux)无法使用新的 libidn2 重建其软件包,结果这些软件包错误地链接到 libidn2.so.0

    如果你真的遇到了 Parabola 错误,那么你根本就没有使用 Arch Linux,你需要说明你实际上是在使用 Parabola,否则人们将不知道如何帮助你。

    • 1

相关问题

  • archlinux efi netboot 内核“ip”不起作用?systemd "启动 Switch Root 失败。"

  • 使用 shell 脚本安装 ncdf4 R 包

  • 如何在 Arch Linux 上设置音频,支持多个程序同时发出音频而不创建 asoundrc?

  • 为什么有时需要手动导入密钥?

  • 在启动时加载设备

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve