2012-06-28 28 views
33

Sto compilando un pacchetto deb e quando corro dpkg-buildpackage ottengo:dpkg-shlibdeps: errore: nessuna informazioni sulle dipendenze trovate per

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

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

questo accade perché ho installato la dipendenza manualmente. So che il problema verrà risolto se installo la dipendenza (o utilizzo checkinstall) e voglio generare il pacchetto comunque perché non sono interessato al controllo delle dipendenze. So che posso dare a dpkg-shlibdeps l'opzione --ignore-missing-info che impedisce un errore se non è possibile trovare informazioni sulla dipendenza. Ma io non so come passare questa opzione per dpkg-shlibdeps dal momento che sto usando dpkg-buildpackage e dpkg-buildpackage chiamate dpkg-shlibdeps ...

ho già provato:

sudo dpkg-buildpackage -rfakeroot -d -B 

E con:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info 

come root.

Qualche idea?

risposta

-1

Infine ho fatto in modo bruta:

ho modificato lo script/usr/bin/dpkg-shlibdeps, cambiare questo:

my $ignore_missing_info = 0; 

a

my $ignore_missing_info = 1; 
+10

questa sembra essere una straordinaria idea pericolosa. se vuoi sostituire i binari, dovresti almeno provare a mettere le alternative in/usr/local/ –

3

dpkg- buildpackage usa make per elaborare debian/rules. in questo processo, dpkg-buildpackage potrebbe chiamare dpkg-shlibdeps.

quindi, il modo corretto per passare modificare una parte del processo di creazione del pacchetto è modificare debian/rules. è difficile dare ulteriori suggerimenti, senza vedere le regole/debian attuali.

15

Se si vuole ignorare solo quella bandiera, cambiare la linea di debian/rules da:

dh_shlibdeps 

a:

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

e se il file debian/rules non contiene quella riga? – knocte

+0

Alcune linee devono attivare questo messaggio, il che significa che deve esistere una regola che chiama dpkg-shlibdeps. Se non è lo script del wrapper dh_shlibdeps, allora che cos'è? –

+0

@knocte Il link non è più valido, potresti aggiornarlo? –

42

uso:

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

se la regola il file non ha la chiamata dh_shlibdeps in esso. Di solito succede se hai

%: 
    dh [email protected] 

come unica regola in esso.

2

Hai appena sbagliato l'esportazione. Dovrebbe essere simile a questo:

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

Questo non ha funzionato per me – dequis

+0

Questo ha funzionato per me (Ubuntu 14.04)! Grazie! –

4

Invece di limitarsi a ignorare l'errore, si potrebbe anche voler fissare l'origine dell'errore, che è di solito o un mancante o un errato package.shlibs o package.symbols file in pacchetto che contiene il libreria condivisa che attiva l'errore.

[1] documenta come dpkg-shlibdeps utilizza package.shlibs risp.package.symbols, file, [2] documenta il formato dei file package.shlibs e package.symbols.

+0

Nel caso in cui il pacchetto che stai costruendo fornisca librerie private condivise l'approccio migliore è usare l'opzione '-ldirectory' di' dpkg-shlibdeps' - vedi https://manpages.debian.org/testing/dpkg-dev/ dpkg-shlibdeps.1.en.html –

7

Ancora un altro modo, senza modificare gli script, solo la creazione di un file.

È possibile specificare local shlib overrides creando debian/shlibs.local con il seguente formato: library-name soname-version dependencies

Ad esempio, dato il seguente (tagliati) ldd /path/to/binary uscita

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) 

Il contenuto di debian/shlibs.local sarebbe:

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

L'elenco "dipendenze" (terza colonna) non necessita per essere precisi al 100% - uso solo il nome della libreria di nuovo.

Ovviamente questo non è necessario in un sistema debian sano che ha questa roba definita in /var/lib/dpkg/info (che può essere utilizzato come ispirazione per queste sostituzioni). Il mio non è un sistema debian sano.

0

È possibile utilizzare questo:

dh_makeshlibs -a -n 

esattamente dopo dh_install