47

我正在编译一个 deb 包,当我运行 dpkg-buildpackage 时,我得到:

dpkg-shlibdeps: error: no dependency information found for /usr/local/lib/libopencv_highgui.so.2.3 

    ...
    make: *** [binary-arch] Error 2

发生这种情况是因为我手动安装了依赖项。我知道如果我安装依赖项(或使用 checkinstall),问题就会得到解决,而且我还是想生成包,因为我对依赖项检查不感兴趣。--ignore-missing-info我知道如果找不到依赖信息,我可以给 dpkg-shlibdeps 防止失败的选项 。但我不知道如何将此选项传递给 dpkg-shlibdeps,因为我正在使用 dpkg-buildpackage 并且 dpkg-buildpackage 调用 dpkg-shlibdeps ...

我已经尝试过:

sudo dpkg-buildpackage -rfakeroot -d -B

与:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info

作为根。

有任何想法吗?

4

8 回答 8

58

利用:

override_dh_shlibdeps:
    dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info

如果您的规则文件中没有 dh_shlibdeps 调用。这通常是这种情况,如果你有

%:
    dh $@

作为唯一的规则......在上面你必须在 dh_shlibdeps 前面使用制表符而不是空格

于 2013-09-13T18:42:09.700 回答
18

如果您希望它忽略该标志,请将 debian/rules 行从:

dh_shlibdeps

至:

dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
于 2013-02-21T00:10:12.240 回答
12

另一种方式,无需修改构建脚本,只需创建一个文件。

您可以通过使用以下格式创建来指定本地 shlib 覆盖:debian/shlibs.locallibrary-name soname-version dependencies

例如,给定以下(修剪后的)ldd /path/to/binary输出

libevent-2.0.so.5 => /usr/lib/libevent-2.0.so.5 (0x00007fc9e47aa000)
libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007fc9e4161000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fc9e3b1a000)

的内容debian/shlibs.local将是:

libevent-2.0 5 libevent-2.0
libgcrypt 20 libgcrypt
libpthread 0 libpthread

“依赖项”列表(第三列)不需要 100% 准确 - 我只是再次使用库名称本身。

当然,在定义了这些东西的健全的 debian 系统中,这不是必需的/var/lib/dpkg/info(可以用作这些覆盖的灵感)。我的不是一个健全的 debian 系统。

于 2015-08-08T02:09:51.617 回答
8

您可能还想修复错误的根源,而不是仅仅忽略错误,这通常是丢失或不正确package.shlibspackage.symbols包含触发错误的共享库的包中的文件。

[1] 记录了如何dpkg-shlibdeps使用package.shlibsresp。package.symbols, 文件, [2] 文件package.shlibspackage.symbols文件的格式。

于 2014-02-11T19:10:57.300 回答
4

dpkg-buildpackage 使用 make 来处理 debian/rules。在这个过程中,dpkg-buildpackage 可能会调用 dpkg-shlibdeps。

因此,通过修改包构建过程的一部分的正确方法是编辑 debian/rules。如果没有看到实际的 debian/规则,很难给你更多提示。

于 2012-06-28T19:56:10.503 回答
4

您只是拼错了您的导出。它应该是这样的:

export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
于 2013-10-16T06:17:19.100 回答
0

最后我以粗暴的方式做到了:

我编辑了脚本/usr/bin/dpkg-shlibdeps,改变了这个:

my $ignore_missing_info = 0;

my $ignore_missing_info = 1;
于 2012-06-28T15:21:14.713 回答
0

你可以使用这个:

dh_makeshlibs -a -n

就在 dh_install 之后

于 2017-05-28T14:14:41.647 回答