Provided by: dpkg-dev_1.17.5ubuntu5.8_all
NAZWA
dpkg-shlibdeps - generowanie zależności podstawień współdzielonych bibliotek
SKŁADNIA
dpkg-shlibdeps [opcja...] [-e]plik-wykonywalny [opcja...]
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-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 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" 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ść).
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 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.
DIAGNOSTYKA
Warnings 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. Errors 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.
ZOBACZ TAKŻE
deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1).
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 Michał Kułach <michal.kulach@gmail.com>, 2012