dpkg-shlibdeps: error: no dependency information f

2019-01-17 02:55发布

问题:

I'm compiling a deb package and when I run dpkg-buildpackage I get:

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

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

This happens because I installed the dependency manually. I know that the problem will be fixed if I install the dependency (or use checkinstall), and I want to generate the package anyway because I'm not interested on dependency checking. I know that I can give to dpkg-shlibdeps the option --ignore-missing-info which prevents a fail if dependency information can't be found. But I don't know how to pass this option to dpkg-shlibdeps since I'm using dpkg-buildpackage and dpkg-buildpackage calls dpkg-shlibdeps...

I have already tried:

sudo dpkg-buildpackage -rfakeroot -d -B

And with:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info

as root.

Any ideas?

回答1:

use:

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

if your rule file hasn't the dh_shlibdeps call in it. That's usually the case if you've

%:
    dh $@

as only rule in it.



回答2:

If you want it to just ignore that flag, change the debian/rules line from:

dh_shlibdeps

to:

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


回答3:

Yet another way, without modifying build scripts, just creating one file.

You can specify local shlib overrides by creating debian/shlibs.local with the following format: library-name soname-version dependencies

For example, given the following (trimmed) ldd /path/to/binary output

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)

The contents of debian/shlibs.local would be:

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

The "dependencies" list (third column) doesn't need to be 100% accurate - I just use the library name itself again.

Of course this isn't needed in a sane debian system which has this stuff defined in /var/lib/dpkg/info (which can be used as inspiration for these overrides). Mine isn't a sane debian system.



回答4:

Instead of merely ignoring the error, you might also want to fix the source of the error, which is usually either a missing or an incorrect package.shlibs or package.symbols file in package which contains the shared library triggering the error.

[1] documents how dpkg-shlibdeps uses the package.shlibs resp. package.symbols, files, [2] documents the format of the package.shlibs and package.symbols files.

  • [1] https://manpages.debian.org/jessie/dpkg-dev/dpkg-shlibdeps.1.en.html
  • [2] https://www.debian.org/doc/debian-policy/ch-sharedlibs.html


回答5:

dpkg-buildpackage uses make to process debian/rules. in this process, dpkg-buildpackage it might call dpkg-shlibdeps.

thus, the proper way to pass modify a part of the package building process is to edit debian/rules. it's hard to give you any more hints, without seeing the actual debian/rules.



回答6:

You've just misspelled your export. It should be like this:

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


回答7:

You can use this:

dh_makeshlibs -a -n

exactly after dh_install



回答8:

Finally I did it in the brute way:

I edited the script /usr/bin/dpkg-shlibdeps, changing this :

my $ignore_missing_info = 0;

to

my $ignore_missing_info = 1;