Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ dpkg shlibdeps:错误:未找到依赖项信息_C++_Qt_Build_Ld_Packaging - Fatal编程技术网

C++ dpkg shlibdeps:错误:未找到依赖项信息

C++ dpkg shlibdeps:错误:未找到依赖项信息,c++,qt,build,ld,packaging,C++,Qt,Build,Ld,Packaging,我正在尝试使用dpkg buildpackage为我的Qt应用程序创建一个.deb包。我编译了一个第三方(snmp)用于我的应用程序。它运行成功。但在生成.deb应用程序时,a出现错误: dpkg shlibdeps:错误:找不到/usr/local/lib/libnetsnmp.so.30的依赖项信息 我一直在这个链接中寻找解决方案: 还有其他页面,但没有找到解决方案 我试图编辑/etc/ld.so.conf来添加libnetsnmp.so.30路径,但没有成功 我刚意识到当运行命令时: l

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

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

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

还有其他页面,但没有找到解决方案

我试图编辑/etc/ld.so.conf来添加libnetsnmp.so.30路径,但没有成功

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

ldconfig -p | grep libnetsnmp.so.30
我在ldconfig中得到了两个libnetsnmp.so.30 lib,而且它们彼此不同

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
我还试着只提供其中一个。但它不起作用

有没有办法生成带或不带这个lib的.deb包

备注:我不打算将/usr/bin/dpkg shlibdeps编辑为$ignore\u missing\u info=1,作为解决办法


谢谢

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

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

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

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

(b) :正确打包库是一个相当深入的主题;答案太多了。但文件是存在的。根据libnetsnmp相对于上游版本的更改程度,您可能需要更改库的名称(和
SONAME
),以避免任何混淆。如果您的libnetsnmp只是Debian sid或Ubuntu中较新libsnmp包的一个后端口,那么正确的做法可能是在您的PPA中提供一份“官方”libsnmp30deb的副本,或者安排
libsnmp30
在一个后端口存储库中发送。然后,您只需要在包中添加一个
构建依赖项:
on
libsnmp dev(>=whatever)
,并根据该文件构建(而不是手动安装的.so文件
/usr/local


(c) :如果您实际上不需要对snmp进行自定义编译,并且您的操作系统/发行版中提供的版本已经足够好了,那么只需
编译依赖于此:
,并删除手动安装的.so文件
/usr/local

,感谢您提到将dpkg shlibdeps编辑为$ignore\u missing\u info=1的选项。这对我有用!