2012-06-28 5 views
33

finde ich ein deb-Paket zusammenzustellen und als ich dpkg-build laufen erhalte ich:dpkg-shlibdeps: Fehler: keine Abhängigkeitsinformationen für

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

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

Dies geschieht, weil ich die Abhängigkeit manuell installiert. Ich weiß, dass das Problem behoben wird, wenn ich die Abhängigkeit installiere (oder checkinstall verwende), und ich möchte das Paket trotzdem generieren, weil ich nicht an Abhängigkeitsüberprüfung interessiert bin. Ich weiß, dass ich zu dpkg-shlibdeps die Option geben kann --ignore-missing-info die ein verhinderte fehlschlagen, wenn Abhängigkeitsinformation nicht gefunden werden kann. Aber ich weiß nicht, wie diese Option, um passieren zu dpkg-shlibdeps da ich bin mit dpkg-build und dpkg-build ruft dpkg-shlibdeps ...

Ich habe bereits versucht:

sudo dpkg-buildpackage -rfakeroot -d -B 

Und mit:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info 

als root.

Irgendwelche Ideen?

Antwort

-1

Schließlich habe ich es in der Brute-Weg:

ich das Skript/usr/bin/dpkg-shlibdeps bearbeitet, ändert dies:

my $ignore_missing_info = 0; 

zu

my $ignore_missing_info = 1; 
+10

dies eine außergewöhnliche gefährliche Idee zu sein scheint. Wenn Sie Binärdateien ersetzen möchten, sollten Sie zumindest versuchen, die Alternativen in/usr/local/ –

3

dpkg- buildpackage verwendet make, um debian/rules zu verarbeiten. In diesem Prozess kann dpkg-buildpackage dpkg-shlibdeps aufrufen.

somit der richtige Weg, um einen Teil des Pakets Bauprozess ändern passieren ist debian/rules zu bearbeiten. es ist schwer, Ihnen weitere Hinweise zu geben, ohne die eigentlichen debian/Regeln zu sehen.

15

Wenn Sie wollen es genau das Flag zu ignorieren, ändern Sie die debian/rules Zeile von:

dh_shlibdeps 

zu:

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

einzutragen, was ist, wenn die Datei debian/rules diese Zeile nicht enthält? – knocte

+0

Eine Zeile muss diese Nachricht auslösen, was bedeutet, dass eine Regel vorhanden sein muss, die dpkg-shlibdeps aufruft. Wenn es nicht das Wrawerscript dh_shlibdeps ist, was ist es dann? –

+0

@knocte Der Link ist nicht mehr gültig, können Sie ihn aktualisieren? –

42

Verwendung:

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

Wenn die Regel Datei enthält nicht den dh_shlibdeps-Aufruf. Das ist normalerweise der Fall, wenn Sie haben

%: 
    dh [email protected] 

als nur Regel darin.

2

Sie haben gerade Ihren Export falsch geschrieben. Es sollte so aussehen:

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

Das hat bei mir nicht funktioniert – dequis

+0

Das hat bei mir funktioniert (Ubuntu 14.04)! Vielen Dank! –

4

Statt nur den Fehler zu ignorieren, könnten Sie auch die Quelle des Fehlers beheben möchten, die in der Regel entweder eine fehlende oder falsche package.shlibs oder package.symbols Datei im Paket ist, das das enthält shared library löst den Fehler aus.

[1] dokumentiert, wie dpkg-shlibdeps verwendet die package.shlibs resp.package.symbols, Dateien, [2] dokumentiert das Format der Dateien package.shlibs und package.symbols.

+0

Wenn das Paket, das Sie erstellen, private, gemeinsam genutzte Bibliotheken enthält, ist es besser, die '-ldirectory' Option von' dpkg-shlibdeps' zu verwenden - siehe https://manpages.debian.org/testing/dpkg-dev/ dpkg-shlibdeps.1.de.html –

7

Noch eine andere Art und Weise, ohne Skripte zu modifizieren bauen, nur eine Datei zu erstellen.

Sie local shlib overrides indem debian/shlibs.local mit folgendem Format angeben: library-name soname-version dependencies

Zum Beispiel mit dem folgenden (getrimmten) ldd /path/to/binary Ausgang

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) 

Der Inhalt debian/shlibs.local wäre:

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

Die Liste "Abhängigkeiten" (dritte Spalte) wird nicht benötigt um 100% genau zu sein - ich benutze einfach den Namen der Bibliothek selbst wieder.

Natürlich wird dies nicht in einem gesunden Debian-System benötigt, das dieses Zeug in /var/lib/dpkg/info definiert hat (das als Inspiration für diese Überschreibungen verwendet werden kann). Meins ist kein vernünftiges Debian-System.

0

Sie können diese verwenden:

dh_makeshlibs -a -n 

genau nach dh_install

Verwandte Themen