2012-06-28 32 views
33

我编译deb包,当我运行的dpkg-buildpackage我没有得到任何依赖信息:的dpkg-shlibdeps:错误:发现

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-buildpackage以及dpkg-buildpackage调用的dpkg-shlibdeps通过这个选项的dpkg-shlibdeps ...

我已经尝试:

sudo dpkg-buildpackage -rfakeroot -d -B 

并与:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info 

作为根。

任何想法?

回答

-1

最后我做到了以野蛮方式:

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

my $ignore_missing_info = 0; 

my $ignore_missing_info = 1; 
+10

这似乎是一个不平凡危险的想法。如果要替换二进制文件,至少应该尝试将替代文件放入/ usr/local/ –

3

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

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

15

如果你希望它只是忽略该标志,从改变的debian /规则行:

dh_shlibdeps 

到:

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

如果debian/rules文件不包含该行,该怎么办? – knocte

+0

某些行必须触发该消息,这意味着必须有一些调用dpkg-shlibdeps的规则。如果它不是dh_shlibdeps包装脚本,那它是什么? –

+0

@knocte链接无效,你能否更新? –

42

使用:

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

如果您的规则文件中没有dh_shlibdeps调用。通常情况下,如果你已经

%: 
    dh [email protected] 

作为只有它的规则。

2

你刚才拼写出口。它应该是这样的:

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

这对我无效 – dequis

+0

这适用于我(Ubuntu 14.04)!谢谢! –

4

,而不是仅仅忽略错误,你也可能要修正这个错误的根源,这是通常要么缺少或不正确的package.shlibspackage.symbols文件包,其中包含了共享库触发错误。

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

+0

如果您正在构建的软件包提供私有共享库,更好的方法是使用'dpkg-shlibdeps'的'-ldirectory'选项 - 请参阅https://manpages.debian.org/testing/dpkg-dev/的dpkg-shlibdeps.1.en.html –

7

又一种方式,而不需要修改构建脚本,只创建一个文件。

可以通过具有以下格式创建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%准确 - 我只是再次使用库名称。

当然这是没有必要在具有这种东西在/var/lib/dpkg/info定义(其可被用作灵感这些超驰)神志清醒的Debian系统。我的矿井不是一个理智的debian系统。

0

您可以使用此:

dh_makeshlibs -a -n 

正是后dh_install