dpkg-shlibdeps: error: no dependency information found for

31,486

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.

Solution 5

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

export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
Share:
31,486

Related videos on Youtube

user1370912
Author by

user1370912

Updated on August 22, 2020

Comments

  • user1370912
    user1370912 almost 4 years

    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?

  • umläute
    umläute about 12 years
    this seems to be an extraordinary dangerous idea. if you want to replace binaries, you should at least try to put the alternatives into /usr/local/
  • knocte
    knocte over 11 years
    what if the debian/rules file doesn't contain that line?
  • Wes Hardaker
    Wes Hardaker over 11 years
    Some line must be triggering that message, which means there must be some rule that is calling dpkg-shlibdeps. If it's not the dh_shlibdeps wrapper script, then what is it?
  • Piotr Dobrogost
    Piotr Dobrogost over 6 years
    In case where the package you're building provides private shared libraries the better approach is to use the -ldirectory option of dpkg-shlibdeps – see manpages.debian.org/testing/dpkg-dev/dpkg-shlibdeps.1.en.htm‌​l
  • Stéphane
    Stéphane about 5 years
    @WesHardaker In the case of CPack, there is no debian/rules file.
  • Alexis Wilke
    Alexis Wilke over 3 years
    That was close but pretty useless if you depend on the very library that breaks the build (plus the way you have it, it creates a circular dependency). It works for me if I change the dependency name to an existing library. In my package, I used: libnvbuf_utils 1.0.0 libgcc1 and now I get my package built. libgcc1 is a given is you have compiled executables. As you mentioned, you'll see the list of libraries using ldd so you can pick any one of them from there. You could also check the very library you're having a problem with using objdump -x ... to see what it depends on.
  • Alexis Wilke
    Alexis Wilke over 3 years
    Ouch! Yeah... Don't do that. Not a good solution. @dequis had the very solution you want to use, but the dependency he proposed was not going to work (i.e. depend on yourself is bad, but since that's the very library which needs to be properly defined, it will still be wrong. I put a comment with what I've done and it works like a charm.)