dpkg-shlibdeps [opcja...]
[-e]plik-wykonywalny [opcja...]
dpkg-shlibdeps określa zależności
podstawień współdzielonych bibliotek dla plików
wykonywalnych podanych jako argumenty. Zależności te są
dodawane do pliku podstawień zmiennych debian/substvars jako
zmienne shlibs:pole-zależności, przy czym
pole-zależności jest nazwą odpowiedniego pola
zależności. Wszystkie inne zmienne rozpoczynające
się od shlibs: są usuwane z tego pliku.
dpkg-shlibdeps ma dwa źródła
informacji służące do generowania informacji o
zależnościach. Są to pliki symbols lub pliki
shlibs. Dla każdego pliku binarnego analizowanego przez
dpkg-shlibdeps określana jest lista bibliotek, z
którymi jest on linkowany. Następnie dla każdej
biblioteki przeglądany jest plik symbols lub plik
shlibs (jeśli ten pierwszy nie istnieje, lub gdy
debian/shlibs.local zawiera stosowną zależność).
Oba pliki powinny być dostarczane przez pakiet zawierający
bibliotekę i powinny więc być dostępne jako
/var/lib/dpkg/info/pakiet.symbols lub
/var/lib/dpkg/info/pakiet.shlibs. Nazwa pakietu jest
określana w dwóch krokach: odnalezienie pliku biblioteki w
systemie (sprawdzając w tych samych katalogach, których
używa ld.so), a następnie użycie dpkg -S
plik-biblioteki w celu określenia pakietu
dostarczającego daną bibliotekę.
Pliki symboli zawierają dokładniejsze
określenia informacji o zależnościach,
dostarczając minimum zależności dla każdego
symbolu eksportowanego przez bibliotekę. Skrypt próbuje
odnaleźć plik związany z pakietem biblioteki w
następujących miejscach (użyte jest pierwsze
dopasowanie):
- debian/*/DEBIAN/symbols
- Informacje o współdzielonej bibliotece wygenerowane w
bieżącym procesie budowy, który wywołał
również dpkg-shlibdeps. Są one generowane
przez dpkg-gensymbols(1). Są używane tylko, gdy
biblioteka znajduje się w drzewie budowania pakietu. Plik
"symbols" z tego drzewa ma pierwszeństwo nad plikami
symboli z innych pakietów binarnych.
- /etc/dpkg/symbols/pakiet.symbols.arch
- /etc/dpkg/symbols/pakiet.symbols
- Informacje o zasięgu systemu, które nadpisują
informacje o zależnościach bibliotek
współdzielonych. arch jest architekturą
bieżącego systemu (określoną przez
dpkg-architecture -qDEB_HOST_ARCH).
- Wynik z "dpkg-query
--control-path pakiet symbols"
- Package-provided shared library dependency information. Unless overridden
by --admindir, those files are located in /var/lib/dpkg.
Podczas przeszukiwania symboli używanych przez wszystkie
pliki binarne, dpkg-shlibdeps zapamiętuje
(największą) minimalną wersję wymaganą
dla każdej biblioteki. Na końcu procesu jest więc w
stanie wypisać minimalne zależności dla każdej
użytej biblioteki (pod warunkiem, że informacja z
plików symbols jest dokładna).
As a safe-guard measure, a symbols file can provide a
Build-Depends-Package meta-information field and
dpkg-shlibdeps will extract the minimal version required by the
corresponding package in the Build-Depends field and use this version
if it's higher than the minimal version computed by scanning symbols.
Pliki "shlibs" wiążą
bezpośrednio bibliotekę z zależnościami (bez
przeglądania symboli). Jest to więc często silniejsze
niż naprawdę potrzebne, ale bardzo bezpieczne i łatwe w
obsłudze.
Zależności dla biblioteki są wyszukiwane w
kilku miejscach. Używany jest pierwszy plik zawierający
informacje dla danej biblioteki:
- debian/shlibs.local
- Lokalne informacje z pakietu nadpisujące informacje o
zależnościach bibliotek współdzielonych.
- /etc/dpkg/shlibs.override
- Informacje o zasięgu systemu, które nadpisują
informacje o zależnościach bibliotek
współdzielonych.
- debian/*/DEBIAN/shlibs
- Informacje o zależnościach współdzielonych
bibliotek wygenerowane w bieżącym procesie budowy,
który wywołał również
dpkg-shlibdeps. Są używane tylko, gdy biblioteka
znajduje się w drzewie budowania pakietu. Plik "shlibs" z
tego drzewa ma pierwszeństwo nad plikami shlibs z innych
pakietów binarnych."
- Wynik z
"dpkg-query --control-path pakiet shlibs"
- Package-provided shared library dependency information. Unless overridden
by --admindir, those files are located in /var/lib/dpkg.
- /etc/dpkg/shlibs.default
- Domyślna informacja o zależnościach bibliotek
współdzielonych, o zakresie systemu.
Uzyskane zależności są używane
bezpośrednio (chyba, że są odfiltrowane ponieważ
zostały zidentyfikowane jako duplikaty lub słabsze niż
jakaś inna zależność).
dpkg-shlibdeps interpretuje parametry nie
będące opcjami jako nazwy plików wykonywalnych, tak
jakby były podane przez -eplik_wykonywalny.
- -eplik-wykonywalny
- Include dependencies appropriate for the shared libraries required by
executable. This option can be used multiple times.
- -ldirectory
- Add directory to the list of directories to search for private
shared libraries (since dpkg 1.17.0). This option can be used multiple
times.
Note: Use this option instead of setting
LD_LIBRARY_PATH, as that environment variable is used to control
the run-time linker and abusing it to set the shared library paths at
build-time can be problematic when cross-compiling for example.
- -dpole-zależności
- Dodanie zależności, które mają być
dodane do pola zależności
pole-zależności pliku kontrolnego
(zależności dla tego pola są umieszczane w zmiennej
shlibs:pole-zależności).
Opcja -dpole-zależności
wpływa na wszystkie pliki wykonywalne podane po tej opcji,
aż do następnego
-dpole-zależności. Domyślnym
polem-zależności jest Depends.
Jeśli to samo określenie
zależności (lub zbiór alternatyw) pojawia
się w więcej niż jednej nazwie z
rozróżnianych pól zależności
Pre-Depends, Depends, Recommends, Enhances
lub Suggests to dpkg-shlibdeps automatycznie usunie
zależność ze wszystkich pól, poza polem
reprezentującym najważniejsze
zależności.
- -pprefiks-nazw-zmiennych
- Rozpoczynanie nazw zmiennych podstawiania od
prefiks-nazw-zmiennych: zamiast shlibs:. Podobnie,
wszystkie zmienne rozpoczynające się od
prefiks-nazw-zmiennych: (zamiast shlibs:) są
usuwane z pliku zmiennych podstawiania.
- -O[filename]
- Print substitution variable settings to standard output (or
filename if specified), rather than being added to the substitution
variables file (debian/substvars by default).
- -ttyp
- Preferowanie informacji o zależnościach bibliotek
współdzielonych oznaczonych dla danego typu pakietu.
Jeśli informacji oznaczonych nie ma, używane są
informacje bez oznaczeń. Domyślnym typem pakietu jest
"deb". Informacje o zależnościach bibliotek
współdzielonych są oznaczane dla danego typu pakietu
przez poprzedzenie ich nazwą typu, dwukropkiem oraz białymi
znakami (spacjami).
- -Llokalny-plik-shlibs
- Odczyt nadpisań informacji o bibliotekach
współdzielonych z lokalnego-pliku-shlibs zamiast
debian/shlibs.local.
- -Tplik-zmiennych-podst
- Zapis zmiennych podstawiania w pliku plik-zmiennych-podst;
domyślnie jest to debian/substvars.
- -v
- Włączenie dodatkowych informacji. Wyświetlanych jest
wiele komunikatów tłumaczących działanie
dpkg-shlibdeps.
- -xpakiet
- Wyłączenie pakietu z generowanych zależności.
Użyteczne aby zapobiec zależnościom pakietu od samego
siebie dla pakietów dostarczających binaria typu ELF (pliki
wykonywalne lub biblioteki), które zależą od innej
biblioteki zawartej w tym samym pakiecie. Ta opcja może być
użyta wielokrotnie aby wyłączyć kilka
pakietów.
- -Skatalog-budowania-pakietu
- Przeglądanie najpierw katalogu-budowania-pakietu przy
próbie odnalezienia biblioteki. Przydatne gdy pakiet
źródłowy tworzy wiele odmian tej samej biblioteki, a
chce się zapewnić uzyskanie zależności od
określonego pakietu binarnego. Ta opcja może być
użyta wielokrotnie: katalogi będą przeglądane
w tej samej kolejności przed katalogami innych pakietów
binarnych.
- --ignore-missing-info
- Kontynuacja pomimo braku informacji o zależnościach dla
biblioteki współdzielonej. Odradza się
używanie tej opcji, wszystkie biblioteki powinny dostarczać
informacje o zależnościach (w postaci plików shlibs
lub plików symboli) - nawet jeśli nie są jeszcze
używane przez inne pakiety.
- --warnings=wartość
- wartość jest polem bitowym definiującym
zbiór ostrzeżeń, które mogą być
wysłane przez dpkg-shlibdeps. Bit 0
(wartość=1) włącza ostrzeżenie "w
żadnej z bibliotek nie znaleziono symbolu symb
używanego przez plik-binarny", bit 1
(wartość=2) włącza ostrzeżenie
"można by uniknąć zależności od
biblioteki bibl", zaś bit 2 (wartość=4)
włącza ostrzeżenie "plik-binarny nie
powinien być linkowany z biblioteką".
Domyślną wartością jest 3: pierwsze dwa
ostrzeżenia są domyślnie aktywne, zaś ostatnie
nie. Ustawienie wartości na 7 powoduje aktywację
wszystkich ostrzeżeń.
- --admindir=katalog
- Zmienia położenie bazy danych dpkg. Domyślnie
jest to /var/lib/dpkg.
- -?, --help
- Wyświetla informację o użytkowaniu i kończy
działanie.
- --version
- Wyświetla informację o wersji i pomyślnie
kończy działanie.
Ponieważ dpkg-shlibdeps analizuje zbiór
symboli używanych przez każdy plik binarny generowanego
pakietu, jest w stanie wysyłać ostrzeżenia w pewnych
przypadkach. Informują one o rzeczach, które mogą
być ulepszone w pakiecie. W większości
przypadków dotyczy to bezpośrednio oryginalnych
źródeł. Poniżej zebrane są
ostrzeżenia na jakie można natrafić, w
kolejności malejącej ważności:
- w żadnej z bibliotek nie
znaleziono symbolu symb używanego przez
plik_binarny
- Wskazany symbol nie został odnaleziony w żadnej z bibliotek,
z którymi jest linkowany plik binarny. Taki plik_binarny
jest najpewniej biblioteką i powinien być linkowany z
dodatkową biblioteką podczas budowania pakietu (opcja
-lbiblioteka linkera).
- plik_binarny
zawiera nierozwiązywalne odniesienie do symbolu sym:
prawdopodobnie jest to wtyczka
- Wskazany symbol nie został odnaleziony w żadnej z bibliotek,
z którymi jest linkowany plik binarny. Taki plik_binarny
jest najpewniej wtyczką i jest prawdopodobnie dostarczany wraz z
programem, który ładuję taką wtyczkę.
Teoretycznie wtyczka nie powinna mieć pola SONAME, jednak ten plik
binarny je posiada i nie można go zidentyfikować na tej
podstawie. Fakt, iż plik ten jest umieszczony w niepublicznym
katalogu mocno wskazuje na to, że nie jest on zwykłą
biblioteką współdzieloną. Jeśli plik
binarny rzeczywiście jest wtyczką, można
pominąć to ostrzeżenie. Jednak zawsze istnieje
możliwość, że jest to biblioteka i programy z
nią linkowane używają RPATH, aby dynamiczny loader
był w stanie ją odnaleźć. W takim przypadku
bibliotekę można uznać za zepsutą i
należy ją naprawić.
- można by
uniknąć zależności od
bibliotekijeżeli nie byłoby niepotrzebnego
linkowania pliku-binarnego z nią (nie jest
używany żadny z tamtejszych symboli)
- Żaden z plików_binarnych, które są
linkowane z biblioteką nie używa symboli przez
nią udostępnianych. Poprawiając wszystkie pliki
binarne można uniknąć zależności
związanych z tą biblioteką (chyba, że taka
sama zależność jest również generowana
przez inną bibliotekę, która jest faktycznie
używana).
- można by
uniknąć zależności od biblioteki,
jeżeli nie byłoby niepotrzebnego linkowania
plików-binarnych z nią (nie są
używane żadne z tamtejszych symboli).
- Dokładnie to samo co powyżej, tylko dla kilku plików
binarnych.
- plik-binarny nie
powinien być linkowany z biblioteką (nie
są używane żadne z tamtejszych symboli).
- plik_binarny jest linkowany z biblioteką, której nie
potrzebuje. Nie jest to problem, ale można uzyskać
pewną poprawę wydajności czasu ładowania pliku
binarnego, jeśli biblioteka ta nie będzie z nim linkowana.
To ostrzeżenie sprawdza te same informacje co poprzednie, ale
wykonuje to dla każdego pliku binarnego zamiast wykonywania
globalnego sprawdzenia dla wszystkich analizowanych plików.
dpkg-shlibdeps przerwie działanie z
błędem jeśli nie będzie w stanie
znaleźć publicznej biblioteki używanej przez plik
binarny, lub jeśli biblioteka taka nie będzie mieć
powiązanej informacji o zależnościach (pliku shlibs lub
pliku symboli). Publiczne biblioteki mają SONAME i są
wersjonowane (jak np. libsomething.so.X). Biblioteki prywatne (jak
np. wtyczki) nie powinny mieć SONAME i nie muszą być
wersjonowane.
- nie można
znaleźć biblioteki soname-biblioteki potrzebnej
dla pliku_binarnego (RPATH to
"rpath")
- The binary uses a library called library-soname but
dpkg-shlibdeps has been unable to find the library.
dpkg-shlibdeps creates a list of directories to check as following:
directories listed in the RPATH of the binary, directories listed in
/etc/ld.so.conf, directories added by the -l option, directories
listed in the LD_LIBRARY_PATH environment variable, and standard
public directories (/lib, /usr/lib, /lib32, /usr/lib32, /lib64,
/usr/lib64). Then it checks those directories in the package's build tree
of the binary being analyzed, in the packages' build trees indicated with
the -S command-line option, in other packages' build trees that
contains a DEBIAN/shlibs or DEBIAN/symbols file and finally in the root
directory. If the library is not found in any of those directories, then
you get this error.
If the library not found is in a private directory of the same
package, then you want to add the directory with -l. If it's in
another binary package being built, you want to make sure that the
shlibs/symbols file of this package is already created and that
-l contains the appropriate directory if it also is in a private
directory.
- nie znaleziono informacji
o zależnościach dla plik-biblioteki
(używanego przez plik-binarny).
- Biblioteka wymagana przez plik-binarny została znaleziona
przez dpkg-shlibdeps w pliku-biblioteki, ale
dpkg-shlibdeps nie mógł odnaleźć
żadnej informacji o zależnościach dla tej biblioteki.
Aby określić zależności, podjęto
próbę użycia dpkg -Splik-biblioteki w
celu określenia pakietu dostarczającego daną
bibliotekę. Następnie sprawdzono odpowiednie pliki shlibs i
pliki symboli w /var/lib/dpkg/info/ oraz w różnych drzewach
budowania pakietów (debian/*/DEBIAN/).
To niepowodzenie może być spowodowane przez
niepoprawny lub nieistniejący plik shlibs lub plik symboli w
pakiecie biblioteki. Może się również
zdarzyć jeśli biblioteka jest budowana wewnątrz
tego samego pakietu źródłowego, a pliki shlibs
jeszcze nie zostały stworzone (w takim przypadku należy
poprawić debian/rules aby shlibs były tworzone przed
wywołaniem dpkg-shlibdeps). Niewłaściwa
wartość RPATH może również
powodować, że biblioteka zostanie odnaleziona pod
nietypową nazwą, która nie jest związana z
żadnym pakietem (np.
/usr/lib/openoffice.org/../lib/libssl.so.0.9.8 zamiast
/usr/lib/libssl.so.0.9.8). dpkg-shlibdeps próbuje
poradzić sobie z tym starając się odczytać
nazwę kanoniczną (z użyciem realpath(3)) ale
może to nie zawsze zadziałać. Aby
uniknąć problemów, najlepiej jest zawsze
doprowadzić do porządku RPATH pliku binarnego.
Calling dpkg-shlibdeps in verbose mode (-v) will
provide much more information about where it tried to find the
dependency information. This might be useful if you don't understand why
it's giving you this error.
Piotr Roszatycki <dexter@debian.org>, 1999
Bartosz Feński <fenio@debian.org>, 2004-2005
Robert Luberda <robert@debian.org>, 2006-2008
Wiktor Wandachowicz <siryes@gmail.com>, 2008
Michał Kułach <michal.kulach@gmail.com>, 2012