On Tue, Jul 13, 2010 at 12:19:14AM +0400, Alexey Tourbin wrote: > Ну вот например показывает что libabiword-2.8 недолинкован с libX11. > > [at@people at]$ fgrep libabiword-2.8 unjoined > abiword /usr/lib64/libabiword-2.8.so U XFreeModifiermap > abiword /usr/lib64/libabiword-2.8.so U XGetModifierMapping > abiword /usr/lib64/libabiword-2.8.so U XKeycodeToKeysym > abiword /usr/lib64/libabiword-2.8.so U XKeysymToKeycode > abiword /usr/lib64/libabiword-2.8.so U XParseGeometry > abiword-light /usr/lib64/libabiword-2.8.so U XFreeModifiermap > abiword-light /usr/lib64/libabiword-2.8.so U XGetModifierMapping > abiword-light /usr/lib64/libabiword-2.8.so U XKeycodeToKeysym > abiword-light /usr/lib64/libabiword-2.8.so U XKeysymToKeycode > abiword-light /usr/lib64/libabiword-2.8.so U XParseGeometry > [at@people at]$ rpm -qpR /ALT/Sisyphus/files/x86_64/RPMS/abiword-2.8.4-alt1.x86_64.rpm |grep libX > [at@people at]$ > > Как могло получиться, что abiword недолинкован с libX11? > У нас же и в binutils подержка есть "подцепить недостающие библиотеки", > и pkg-config для линковки рекурсивно раскрывает список Libs. В ld/bfd что-то не так работает. libtool: link: i586-alt-linux-g++ -pipe -Wall -O2 -march=i586 -mtune=i686 --no-undefined -o .libs/abiword abiword-UnixMain.o -pthread -Wl,--export-dynamic ./.libs/libabiword-2.8.so -lfribidi -lwv -lgsf-1 -lxml2 -lpng -lenchant -lgoffice-0.8 -lz -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lpangoft2-1.0 -lpango-1.0 -lfreetype -lfontconfig -lrsvg-2 -lm -lgdk_pixbuf-2.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -ljpeg -pthread http://git.altlinux.org/beehive/logs/Sisyphus-i586/latest/success/abiword-2.8.4-alt1 (зависимость на libX11 не появляется) Он линкуется с -lgtk-x11-2.0, которая в свою очередь содержит DT_NEEDED libX11.so.6. Тогда согласно документации в ld(1), в режиме --copy-dt-needed-entries он должен просто скопировать DT_NEEDED libX11.so.6 в libabiword-2.8.so! Предварительно проверив (в режиме --as-needed), что библиотека libX11.so.6 разрешает какие-то символы (и мы видим, что она разрешает). В ld(1) вообще говорится "recursively searched". Так что мой пример, когда libX11.so.6 должна подцепиться через -lgtk-x11-2.0 сразу же, - это перестраховка. With the default setting dynamic libraries mentioned on the command line will be recursively searched, following their DT_NEEDED tags to other libraries, in order to resolve symbols required by the output binary.