2012-06-28 20 views
33

mam kompilowania pakietów deb i kiedy biegnę dpkg-buildpackage uzyskać:dpkg-shlibdeps: error: brak informacji zależność znaleziono

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

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

Dzieje się tak dlatego, że zainstalowane ręcznie zależność. Wiem, że problem zostanie rozwiązany, jeśli zainstaluję tę zależność (lub użyję checkinstall), a mimo to chcę wygenerować pakiet, ponieważ nie jestem zainteresowany sprawdzaniem zależności. Wiem, że mogę dać dpkg-shlibdeps opcję --ignore-missing-info, która zapobiega awarii, jeśli nie można znaleźć informacji o zależnościach. Ale nie wiem jak przekazać tę opcję do dpkg-shlibdeps ponieważ używam dpkg-buildpackage i dpkg-buildpackage wzywa dpkg-shlibdeps ...

Próbowałem już:

sudo dpkg-buildpackage -rfakeroot -d -B 

Oraz z:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info 

jako root.

Wszelkie pomysły?

Odpowiedz

-1

Wreszcie zrobiłem go w brutalną sposób:

edytowany skrypt/usr/bin/dpkg-shlibdeps, zmieniając w ten sposób:

my $ignore_missing_info = 0; 

do

my $ignore_missing_info = 1; 
+10

to wydaje się być niezwykłym niebezpieczny pomysł. jeśli chcesz zamienić binaria, powinieneś przynajmniej spróbować umieścić alternatywy w/usr/local/ –

3

dpkg- buildpackage używa make do przetwarzania debian/rules. w tym procesie dpkg-buildpackage może wywołać dpkg-shlibdeps.

W ten sposób właściwym sposobem przekazania modyfikacji części procesu budowania pakietu jest edycja debian/rules. Trudno dać ci więcej wskazówek, nie widząc faktycznego debiana/reguł.

15

Jeśli chcesz go po prostu zignorować tę flagę, zmienić linię debian/rules from:

dh_shlibdeps 

do:

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

, jeśli plik debian/rules nie zawiera tej linii? – knocte

+0

Niektóre linie muszą uruchamiać ten komunikat, co oznacza, że ​​musi istnieć jakaś reguła wywołująca dpkg-shlibdeps. Jeśli to nie jest skrypt owijający dh_shlibdeps, to co to jest? –

+0

@knocte Link nie jest już ważny, czy mógłbyś go zaktualizować? –

42

użytku:

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

jeśli reguła plik nie zawiera wywołania dh_shlibdeps. Zwykle ma to miejsce, jeśli masz tylko jedną regułę.

2

Po prostu błędnie wpisałeś eksport. Powinno być tak:

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

To nie zadziałało dla mnie – dequis

+0

To działało dla mnie (Ubuntu 14.04)! Dzięki! –

4

Zamiast po prostu ignorowanie błędu, możesz również ustalić źródło błędu, który jest zazwyczaj albo brakujące lub nieprawidłowe package.shlibs lub package.symbols plików w pakiecie, który zawiera biblioteka współdzielona powodująca błąd.

[1] dokumentuje, jak dpkg-shlibdeps używa package.shlibs lub odpowiada.package.symbols, pliki, [2] dokumentują format plików package.shlibs i package.symbols.

+0

W przypadku, gdy budowany pakiet udostępnia prywatne biblioteki współdzielone, lepszym rozwiązaniem jest użycie opcji '-directory'' dpkg-shlibdeps' - patrz https://manpages.debian.org/testing/dpkg-dev/ dpkg-shlibdeps.1.en.html –

7

Jeszcze innym sposobem, bez modyfikowania budowy skryptów, tylko tworząc jeden plik.

Można określić local shlib overrides tworząc debian/shlibs.local z następującym formacie: library-name soname-version dependencies

Na przykład, biorąc pod uwagę następujące (przycinane) ldd /path/to/binary wyjście

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) 

Zawartość debian/shlibs.local byłoby:

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

Lista "zależności" (trzecia kolumna) nie jest potrzebna być w 100% dokładne - po prostu ponownie używam nazwy biblioteki.

Oczywiście nie jest to potrzebne w rozsądnym systemie debian, który ma te rzeczy zdefiniowane w /var/lib/dpkg/info (które mogą być wykorzystane jako inspiracja dla tych przesłonięć). Mój nie jest rozsądnym systemem debian.

0

Można to wykorzystać:

dh_makeshlibs -a -n 

dokładnie po dh_install