[devel] linkage_problems abiword unjoined
Kirill A. Shutemov
kirill на shutemov.name
Вт Июл 13 10:37:31 UTC 2010
On Tue, Jul 13, 2010 at 12:07:06PM +0400, Alexey Tourbin wrote:
> 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 что-то не так работает.
Хм... Похоже логика --as-needed работает до --copy-dt-needed-entries.
Это странно.
Пример:
$ cat 1.c
#include <stdlib.h>
#include <X11/Xlib.h>
int main(int argc, char **argv)
{
XFreeModifiermap(NULL);
return 0;
}
$ objdump -p /usr/lib/libgtk-x11-2.0.so | grep NEEDED
NEEDED libgdk_pixbuf-2.0.so.0
NEEDED libgdk-x11-2.0.so.0
NEEDED libpangocairo-1.0.so.0
NEEDED libX11.so.6
NEEDED libXfixes.so.3
NEEDED libatk-1.0.so.0
NEEDED libcairo.so.2
NEEDED libgio-2.0.so.0
NEEDED libpangoft2-1.0.so.0
NEEDED libpango-1.0.so.0
NEEDED libfontconfig.so.1
NEEDED libgobject-2.0.so.0
NEEDED libgmodule-2.0.so.0
NEEDED libglib-2.0.so.0
NEEDED libm.so.6
NEEDED libpthread.so.0
NEEDED libc.so.6
$ gcc 1.c -lgtk-x11-2.0
/usr/src/tmp/cc80cbEj.o: In function `main':
1.c:(.text+0x11): undefined reference to `XFreeModifiermap'
collect2: ld returned 1 exit status
$ gcc 1.c -Wl,--no-as-needed -lgtk-x11-2.0
$ objdump -p |grep NEEDED
NEEDED libgtk-x11-2.0.so.0
NEEDED libc.so.6
NEEDED libX11.so.6
--
Kirill A. Shutemov
Подробная информация о списке рассылки Devel