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

时间:2012-06-28 04:37:56

标签: ubuntu debian package dpkg

我正在编译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),问题将得到解决,我想要生成包,因为我对依赖项检查不感兴趣。我知道我可以给dpkg-shlibdeps选项--ignore-missing-info,如果找不到依赖关系信息,它会阻止失败。但我不知道如何将此选项传递给dpkg-shlibdeps,因为我正在使用dpkg-buildpackage和dpkg-buildpackage调用dpkg-shlibdeps ......

我已经尝试过了:

sudo dpkg-buildpackage -rfakeroot -d -B

并且:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info

以root身份。

有什么想法吗?

8 个答案:

答案 0 :(得分:47)

使用:

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

如果您的规则文件中没有调用dh_shlibdeps。如果你

那通常就是这种情况
%:
    dh $@

仅作为规则。

答案 1 :(得分:15)

如果您希望它只是忽略该标志,请从以下位置更改debian / rules行:

dh_shlibdeps

为:

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

答案 2 :(得分:9)

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

您可以使用以下格式创建debian/shlibs.local来指定local shlib overrideslibrary-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系统。

答案 3 :(得分:5)

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

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

答案 4 :(得分:4)

你刚刚拼错了你的出口。它应该是这样的:

export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info

答案 5 :(得分:3)

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

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

答案 6 :(得分:0)

您可以使用:

dh_makeshlibs -a -n

完全在dh_install

之后

答案 7 :(得分:-1)

最后我以蛮力的方式做到了:

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

my $ignore_missing_info = 0;

my $ignore_missing_info = 1;