[devel] linkage_problems abiword unjoined

Alexey Tourbin at на altlinux.ru
Вт Июл 13 08:07:06 UTC 2010


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.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 198 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20100713/bea42a7c/attachment-0001.bin>


Подробная информация о списке рассылки Devel