[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