【发布时间】: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