szukam dla tool
/command
na Unix
platformy wykryć library
zależnościami z .so
i .o
plików.Narzędzie do Biblioteki Zależność
Używam już ldd
/nm
/truss
, ale nie znam właściwego podejścia do wykrywania zależności bibliotek.
szukam dla tool
/command
na Unix
platformy wykryć library
zależnościami z .so
i .o
plików.Narzędzie do Biblioteki Zależność
Używam już ldd
/nm
/truss
, ale nie znam właściwego podejścia do wykrywania zależności bibliotek.
To zależy od tego, co dokładnie rozumie się przez "wykrywanie zależności bibliotek".
Komenda ldd
działa na bibliotekach współużytkowanych, nie tylko na plikach wykonywalnych. wyświetlone zostaną zależności od udostępnionej biblioteki ogłosił gdy biblioteka została zbudowana:
$ ldd /usr/lib/libgtk-3.so
linux-vdso.so.1 (0x00007ffff8fff000)
libgdk-3.so.0 => /usr/lib/libgdk-3.so.0 (0x00007f43fcf47000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007f43fcd43000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00007f43fcb36000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f43fc7fc000)
...
Biblioteka może mieć niezdefiniowane symbole, które są uzyskiwane poprzez połączenie z kolejnymi bibliotekami nie zadeklarowanych jako zależności. Można użyć objdump -T
lub nm -D
pokazać dynamiczne symbole - niezdefiniowane symbole (te, które powinny pochodzić z innych bibliotek) pojawi się jako *UND*
:
$ objdump -T /usr/lib/libgtk-3.so | head
/usr/lib/libgtk-3.so: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
0000000000066e38 l d .init 0000000000000000 .init
0000000000000000 DF *UND* 0000000000000000 g_param_spec_object
0000000000000000 DF *UND* 0000000000000000 g_utf8_validate
0000000000000000 DF *UND* 0000000000000000 g_date_get_month
0000000000000000 DF *UND* 0000000000000000 g_bookmark_file_get_visited
0000000000000000 DF *UND* 0000000000000000 g_value_get_float
Z tych nazw symboli powinno być możliwe, aby wydedukować niezgłoszonych zależności bibliotecznych.
Biblioteki korzystające z pkg-config
lub podobnego mechanizmu konfiguracyjnego czasami nie zgłaszają swoich zależności w czasie kompilacji, ale deklarują zależności do pkg-config
, polegając na użytkownikach bibliotek, aby użyć narzędzia do uzyskania zależności. pkg-config --libs
wyświetli listę zależności w formacie zrozumiałym dla kompilatora:
$ pkg-config --libs gtk+-3.0
-lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0
Brawo! dobrze wyjaśnione. Powodzenia wszystkim. – shellter
Dzięki! Dobrze wyjaśnione, potrzebuję tylko kilku dodatkowych informacji na temat wykorzystania kratownicy i nm. –