dpkg-shlibdeps:错误:未找到依赖关系信息

dpkg-shlibdeps: error: no dependecy information found

本文关键字:依赖 关系 信息 错误 dpkg-shlibdeps      更新时间:2023-10-16

我正在尝试使用 dpkg-buildpackage 创建我的 Qt 应用程序的.deb包。我编译了一个第三方 (snmp( 以在我的应用程序中使用。它成功运行。但是在生成.deb应用程序时,出现错误:

dpkg-shlibdeps: error: 找不到/usr/local/lib/libnetsnmp.so.30 的依赖关系信息

我一直在以下链接中寻找解决方案:

dpkg-shlibdeps:错误:找不到 的依赖项信息

以及其他页面,但没有找到解决方案。

我尝试编辑/etc/ld.so.conf 以添加 libnetsnmp.so.30 路径,但它不起作用。

我刚刚意识到在运行命令时:

ldconfig -p | grep libnetsnmp.so.30

我在ldconfig中得到了两个libnetsnmp.so.30库,而且它们彼此不同。

libnetsnmp.so.30 (libc6,x86-64) => /usr/local/lib/libnetsnmp.so.30
libnetsnmp.so.30 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libnetsnmp.so.30

我也尝试只提供其中之一。但它没有用。

有没有办法生成带有或不带有此库的.deb包?

Obs.:我不打算将/usr/bin/dpkg-shlibdeps 编辑为 $ignore_missing_info = 1 作为解决方法。

谢谢

dpkg-shlibdeps是一个

工具,旨在通过动态链接找出新包所依赖的所有包。它通过检查所有新的二进制文件来查看它们链接到哪些库,以及使用这些库中的哪些符号,然后检查 dpkg 数据库以查看哪些包拥有这些库并找到提供必要的符号所需的最低包版本来实现这一点。

在您的情况下,它看到您的应用程序与该libnetsnmp.so.30链接,因此它会检查哪个包拥有该库。哎呀,没有包。这就是错误的来源 - 也许你已经知道所有这些,但我想我会把它包括在上下文中。

现在,正确的解决方案取决于您希望如何处理自定义编译的 snmp 库。基本上,选择是(a(将自定义libnetsnmp与软件包一起发布,(b(单独打包自定义libnetsnmp,或者(c(根本不使用自定义libnetsnmp;改用操作系统提供的任何libsnmp*包。

(a(:要随软件包一起发布libnetsnmp,您需要小心确保它不提供与标准libsnmp软件包相同的SONAME,因此它们不会相互干扰。最简单的方法可能只是静态链接它(链接到.a.o文件,而不是.so动态库(。如果你的软件包是为 Debian 或 Ubuntu 准备的,这可能会让人皱眉,但如果你证明选择 (b( 和 (c( 对你来说不可行,那可能没问题。

(b(:正确打包库是一个相当深入的话题;对于StackOverflow的答案来说太多了。但是文档就在那里。根据 libnetsnmp 与上游版本相比的更改程度,您可能需要更改库的名称(和SONAME(以避免任何混淆。如果你的libnetsnmp只是Debian sid或Ubuntu中较新的libsnmp软件包的向后移植,那么正确的做法可能是在你的PPA中发布"官方"libsnmp30 deb的副本,或者安排libsnmp30在backports存储库中发布。然后,您只需要在包中添加一个libsnmp-dev (>= whatever)上的Build-Depends:,并针对该进行构建(而不是在/usr/local中手动安装的.so文件(。

(c(:如果您实际上不需要对snmp进行自定义编译,并且操作系统/发行版中可用的版本足够好,那么只需Build-Depends:,然后在/usr/local中删除手动安装的.so文件。