dpkg-shlibdeps: error: no dependency information found for

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?


Solution 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 ... in above you must use a tab and not spaces in front of the dh_shlibdeps

Solution 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

Solution 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.

Solution 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