【问题标题】:Executable can't find shared library during apt install phase可执行文件在 apt 安装阶段找不到共享库
【发布时间】:2021-04-16 07:28:36
【问题描述】:

这是我正在运行的命令,用于从我创建的虚拟仓库安装 Debian 软件包。这个 repo 有 library A 包含一个共享库和 library B 在 Debian 的 postinst 部分启动使用这个共享库的可执行文件。库 B 依赖于库 A(通过 Debian 的 control 文件)。 A库和B库都是我自己打包的。

apt-get -o Dir::Etc::SourceList="${VIRTUAL_REPO_PATH}/upgrade.list" -o Debug::pkgProblemResolver=yes -o Dir::Etc::SourceParts="/dev/null" -o Dir::State::Lists="${VIRTUAL_REPO_PATH}/lists" -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install ${VIRTUAL_REPO_PATH}/${COMPONENT_DEB}*.deb -y --allow-unauthenticated

我已将触发器文件添加到库 A 的 Debian 中,其中包含 here 中提到的“activate-noawait ldconfig”行。

库 A 的 Debian 有 3 个文件(用 dpkg-deb --control .. 提取):control、postinst、triggers。

后期

#! /bin/sh

set -e

if [ "$1" = "configure" ]; then
        ldconfig
fi

触发器

activate-noawait ldconfig

在 dpkg.log 中,我可以看到库 A 在库 B 之前安装和配置。

2021-04-16 08:54:16 configure libsigar:amd64 1.7.0-fs1 <none>
2021-04-16 08:54:16 status unpacked libsigar:amd64 1.7.0-fs1
2021-04-16 08:54:16 status half-configured libsigar:amd64 1.7.0-fs1
2021-04-16 08:54:16 status installed libsigar:amd64 1.7.0-fs1

库 B 的 postinst 中,我正在启动可执行文件,并且在给定的时间它失败并显示 error while loading shared libraries: A: cannot open shared object file: No such file or directory。如果我在安装后立即启动可执行文件,一切正常。我试图从启动可执行文件的那一刻开始注释掉 postinst 脚本并手动执行该部分 - 没有任何问题。

我还在可执行文件启动之前添加了对 postinst 的 ldconfig 调用。

有人知道是什么原因吗?

【问题讨论】:

    标签: c++ ubuntu debian shared-libraries


    【解决方案1】:

    我找到了根本原因。看来我必须在调用 postinst 之前在包中创建一个符号链接(libsigar.so.0 -> libsigar.so)。否则即使 ldconfig 也是不够的。

    运行时库包应该包括符号链接 ldconfig 将为共享库创建的 SONAME。为了 例如,libgdbm3 包应该包含一个符号链接 /usr/lib/libgdbm.so.3 到 libgdbm.so.3.0.0。这是必要的,以便 动态链接器(例如 ld.so 或 ld-linux.so.*)可以找到 dpkg 安装它的时间和安装它的时间之间的库 ldconfig 在 postinst 脚本中运行。[59]

    http://www.chiark.greenend.org.uk/doc/debian-policy/policy.html/ch-sharedlibs.html

    【讨论】:

    • 旁注:您似乎正在阅读 debian-policy 的过时版本(截至今天,它落后 6 年和 39 次修订);如果您遵循过时的文档,您可能会遇到奇怪的问题;参考政策在debian.org/doc/debian-policy
    猜你喜欢
    • 2012-08-13
    • 2011-12-14
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2020-06-06
    • 2021-07-17
    • 2018-10-10
    相关资源
    最近更新 更多