问题描述
我正在编译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
作为根。
有任何想法吗?
最佳解决思路
使用:
override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
如果您的规则文件中没有调用dh_shlibdeps。如果你这样的话通常就是这种情况
%:
dh $@
作为唯一的规则。
次佳解决思路
如果您希望它只是忽略该标志,请从以下位置更改debian /rules行:
dh_shlibdeps
至:
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
第三种解决思路
另一种方法是,无需修改构建脚本,只需创建一个文件。
您可以通过使用以下格式创建debian/shlibs.local
来指定local shlib overrides:library-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
“dependencies”列表(第三列)不需要100%准确 – 我只是再次使用库名称本身。
当然,这在一个理智的debian系统中是不需要的,它具有在/var/lib/dpkg/info
中定义的这个东西(可以用作这些覆盖的灵感)。我的不是一个理智的debian系统。
第四种思路
您可能还想修复错误的来源,而不是仅仅忽略错误,这通常是包中缺少或不正确的package.shlibs
或package.symbols
文件,其中包含触发错误的共享库。
[1]记录了dpkg-shlibdeps
如何使用package.shlibs
。 package.symbols
文件[2]记录了package.shlibs
和package.symbols
文件的格式。
-
[1] https://manpages.debian.org/jessie/dpkg-dev/dpkg-shlibdeps.1.en.html
-
[2] https://www.debian.org/doc/debian-policy/ch-sharedlibs.html
第五种思路
你刚刚拼错了你的出口。它应该是这样的:
export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
第六种思路
dpkg-buildpackage使用make来处理debian /规则。在这个过程中,dpkg-buildpackage可能会调用dpkg-shlibdeps。
因此,通过修改包构建过程的一部分的正确方法是编辑debian /规则。没有看到实际的debian /规则,很难再给你提示。