Provided by:
dpkg-dev_1.15.4ubuntu2_all 
NAZWA
dpkg-shlibdeps - generowanie zależności podstawień współdzielonych
bibliotek
SKŁADNIA
dpkg-shlibdeps [opcje] plik_wykonywalny|-eplik_wykonywalny [opcje]
OPIS
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-zalenoci, przy czym pole-zalenoci jest nazwą
odpowiedniego pola zależności. Wszystkie inne zmienne rozpoczynające
się od shlibs: są usuwane z tego pliku.
dpkg-shlibdeps has two possible sources of information to generate
dependency information. Either symbols files or shlibs files. For each
binary that dpkg-shlibdeps analyzes, it finds out the list of libraries
that it's linked with. Then, for each library, it looks up either the
symbols file, or the shlibs file (if the former doesn't exist or if
debian/shlibs.local contains the relevant dependency). Both files are
supposed to be provided by the library package and should thus be
available as /var/lib/dpkg/info/package.symbols or
/var/lib/dpkg/info/package.shlibs. The package name is identified in
two steps: find the library file on the system (looking in the same
directories that ld.so would use), then use dpkg -S library-file to
lookup the package providing the library.
Pliki symboli
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).
katalog_admin/info/pakiet.symbols
Dostarczane przez pakiet informacje o zależnościach bibliotek
współdzielonych. O ile nie jest nadpisany, admindir ma wartość
/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).
Jako zabezpieczenie plik symboli może zawierać pole metainformacji
Build-Depends-Package, zaś dpkg-shlibdeps określając minimalną wersję
wymaganą przez odpowiadający pakiet z pola Build-Depends będzie używać
właśnie tej wersji, jeśli jest ona wyższa niż minimalna wersja
określona dzięki przeszukiwaniu symboli.
Pliki "shlibs"
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."
katalog_admin/info/package.shlibs
Dostarczane przez pakiet informacje o zależnościach bibliotek
współdzielonych. O ile nie jest nadpisany, admindir ma wartość
/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ść).
OPCJE
dpkg-shlibdeps interpretuje parametry nie będące opcjami jako nazwy
plików wykonywalnych, tak jakby były podane przez -eplik_wykonywalny.
-eplik_wykonywalny
Włączenie zależności odpowiadających bibliotekom współdzielonym
wymaganym przez plik_wykonywalny.
-dpole_zalenoci
Dodanie zależności, które mają być dodane do pola zależności
pole_zalenoci pliku kontrolnego. (Zależności dla tego pola są
umieszczane w zmiennej shlibs:pole_zalenoci.)
Opcja -dpole_zalenoci wpływa na wszystkie pliki wykonywalne
podane po tej opcji, aż do następnego -dpole_zalenoci.
Domyślnym polem_zalenoci 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 Wyświetlenie ustawień zmiennych podstawiania na standardowe
wyjście, zamiast dodawania ich do pliku zmiennych podstawiania
(domyślnie debian/substvars).
-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ą wartoci jest 3:
pierwsze dwa ostrzeżenia są domyślnie aktywne, zaś ostatnie nie.
Ustawienie wartoci na 7 powoduje aktywację wszystkich
ostrzeżeń.
--admindir=katalog
Zmienia położenie bazy danych dpkg. Domyślnie jest to
/var/lib/dpkg.
-h, --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.
UWAGI
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).
binary contains an unresolvable reference to symbol sym: it's probably
a plugin
The indicated symbol has not been found in the libraries linked
with the binary. The binary is most likely a plugin and the
symbol is probably provided by the program that loads this
plugin. In theory a plugin doesn't have any SONAME but this
binary does have one and as such it could not be clearly
identified as such. However the fact that the binary is stored
in a non-public directory is a strong indication that's it's not
a normal shared library. If the binary is really a plugin, then
disregard this warning. But there's always the possibility that
it's a real library and that programs linking to it are using an
RPATH so that the dynamic loader finds it. In that case, the
library is broken and needs to be fixed.
można by uniknąć zależności od biblioteki, jeżeli nie byłoby
niepotrzebnego linkowania plikw_binarnych z nią (nie są używane żadne
z tamtejszych symboli).
Żaden z plikw_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).
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.
BŁĘDY
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")
plik_binarny używa biblioteki o nazwie soname-biblioteki, ale
dpkg-shlibdeps nie mógł odnaleźć tej biblioteki. dpkg-shlibdeps
tworzy listę katalogów do sprawdzenia w następujący sposób:
katalogi wymienione w RPATH pliku binarnego, katalogi wymienione
w /etc/ld.so.conf, katalogi wymienione w zmiennej środowiskowej
LD_LIBRARY_PATH, oraz standardowe katalogi publiczne (/lib,
/usr/lib, /lib32, /usr/lib32, /lib64, /usr/lib64). Następnie
sprawdza podobnie katalogi w drzewie budowania pakietu dla
analizowanego pliku binarnego, w drzewach budowania pakietów
podanych jako parametry opcji -S, w innych drzewach budowania
zawierających pliki DEBIAN/shlibs olub DEBIAN/symbols, a na
końcu w katalogu głównym. Jeśli biblioteka nie zostanie
odnaleziona w żadnym z tych katalogów, otrzymuje się ten błąd.
Jeśli nie odnaleziona biblioteka jest w prywatnym katalogu tego
samego pakietu, należy dodać taki katalog do LD_LIBRARY_PATH.
Jeśli biblioteka jest w innym budowanym binarnym pakiecie,
należy upewnić się, że plik shlibs lub plik symboli dla tego
pakietu został stworzony oraz, że LD_LIBRARY_PATH zawiera
odpowiedni katalog jeśli biblioteka także jest w katalogu
prywatnym.
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/gcc/i486-linux-gnu/4.2.3/../../../../lib/libssl.so.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.
Wywołanie dpkg-shlibdeps w trybie rozszerzonej informacji (-v)
dostarcza wielu dodatkowych informacji o tym, gdzie próbował on
znaleźć informację o zależnościach. Może to być przydatne jeśli
nie wiadomo dlaczego zwracany jest ten błąd.
ZOBACZ TAKŻE
deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1).
AUTORZY
Copyright (C) 1995-1996 Ian Jackson
Copyright (C) 2000 Wichert Akkerman
Copyright (C) 2006 Frank Lichtenheld
Copyright (C) 2007-2008 Raphael Hertzog
Niniejszy program jest oprogramowaniem wolnym, sprawdź Powszechną
Licencję Publiczną GNU w wersji drugiej lub późniejszej, by dowiedzieć
się o warunkach dystrybucji. Brak JAKIEJKOLWIEK gwarancji.
TŁUMACZE
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