dpkg-shlibdeps:错误:未找到任何依赖性信息

use*_*169 2 c++ qt packaging build ld

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

dpkg-shlibdeps:错误:未找到/usr/local/lib/libnetsnmp.so.30的依赖项信息

我一直在寻找这个链接的解决方案:

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

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

我尝试编辑/etc/ld.so.conf来添加libnetsnmp.so.30路径,但它没有用.

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

ldconfig -p | grep libnetsnmp.so.30
Run Code Online (Sandbox Code Playgroud)

我在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
Run Code Online (Sandbox Code Playgroud)

我也试过只提供其中一个.但它没有用.

是否有任何方法可以生成带有或不带有lib的.deb包?

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

谢谢

the*_*aul 6

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

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

现在,正确的解决方案取决于您希望如何处理自定义编译的snmp库.基本上选用的是(一)船舶您的自定义libnetsnmp与你的包,(B)分别libnetsnmp打包您的自定义,或(c)不使用自定义libnetsnmp可言; 使用libsnmp*您的操作系统提供的任何包.

(a):要使用您的软件包运送libnetsnmp,您需要注意确保它不提供与SONAME标准libsnmp软件包相同的内容,因此它们不会相互干扰.最简单的方法可能就是静态链接(链接.a.o文件而不是.so动态库).如果您的软件包适用于Debian或Ubuntu,这可能不赞成,但如果您证明选择(b)和(c)对您不适用,那么它可能会没问题.

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

(三):如果你没有真正需要做的可用SNMP的自定义编辑,并且版本在OS /发行是不够好,然后就Build-Depends:在那,并删除手动安装的.so文件/usr/local.