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

use*_*912 38 ubuntu debian dpkg package

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

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

    ...
    make: *** [binary-arch] Error 2
Run Code Online (Sandbox Code Playgroud)

这是因为我手动安装了依赖项.我知道如果我安装依赖项(或使用checkinstall),问题将得到解决,我仍然想要生成包,因为我对依赖项检查不感兴趣.我知道--ignore-missing-info如果找不到相关性信息,我可以给dpkg-shlibdeps一个防止失败的选项 .但我不知道如何将此选项传递给dpkg-shlibdeps,因为我正在使用dpkg-buildpackage和dpkg-buildpackage调用dpkg-shlibdeps ...

我已经尝试过了:

sudo dpkg-buildpackage -rfakeroot -d -B
Run Code Online (Sandbox Code Playgroud)

与:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info
Run Code Online (Sandbox Code Playgroud)

作为根.

有任何想法吗?

小智 50

使用:

override_dh_shlibdeps:
    dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
Run Code Online (Sandbox Code Playgroud)

如果您的规则文件中没有调用dh_shlibdeps.如果你这样的话通常就是这种情况

%:
    dh $@
Run Code Online (Sandbox Code Playgroud)

作为唯一的规则.


Wes*_*ker 16

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

dh_shlibdeps
Run Code Online (Sandbox Code Playgroud)

至:

dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
Run Code Online (Sandbox Code Playgroud)

  • 如果debian/rules文件不包含该行怎么办? (4认同)

deq*_*uis 9

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

您可以使用以下格式创建本地shlib覆盖debian/shlibs.local: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)
Run Code Online (Sandbox Code Playgroud)

内容debian/shlibs.local将是:

libevent-2.0 5 libevent-2.0
libgcrypt 20 libgcrypt
libpthread 0 libpthread
Run Code Online (Sandbox Code Playgroud)

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

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


sma*_*ani 5

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

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

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

use*_*912 -2

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

我编辑了脚本 /usr/bin/dpkg-shlibdeps,更改了以下内容:

my $ignore_missing_info = 0;
Run Code Online (Sandbox Code Playgroud)

my $ignore_missing_info = 1;
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是一个非常危险的想法。如果你想替换二进制文件,你至少应该尝试将替代品放入 /usr/local/ (12认同)