[devel] I: rpm 4.0.4-alt98.49, latter rain
Dmitry V. Levin
ldv на altlinux.org
Вт Окт 5 21:39:06 UTC 2010
On Tue, Oct 05, 2010 at 02:17:17PM +0400, Alexey Tourbin wrote:
> On Tue, Oct 05, 2010 at 02:01:03PM +0400, Dmitry V. Levin wrote:
> > overlinked libraries означает, что ELF cлинкован с тем, с чем не должен.
> > underlinked libraries означает, что ELF не cлинкован с тем, с чем должен.
> >
> > С первым мы уже давно боремся с помощью -Wl,--as-needed, поэтому наличие
> > overlinked libraries, скорее всего, является следствием использования
> > -Wl,--no-as-needed.
> >
> > Cо вторым мы тоже давно боремся с помощью "%set_verify_elf_method strict".
>
> C недолинковкой вопрос несколько сложнее: verify-elf/ldd не ругается
> на непрямые транзитивные зависимости (по символам), если они разрешаются
> при загрузке. В этом вся соль. И в этом одна из претензий к тулчейну!
>
> Я сейчас не могу придумать тривиальный пример, вот менее тривиальный
> пример:
>
> lib.req: WARNING: /usr/lib64/libwx_gtk2u_adv-2.8.so.0.7.0: underlinked libraries: /usr/lib64/libX11.so.6
> lib.req: WARNING: /usr/lib64/libwx_gtk2u_core-2.8.so.0.7.0: underlinked libraries: /usr/lib64/libX11.so.6
>
> Как так можно было слинковать?
> Проблемы в консерватории имеются.
Вот тривиальный пример:
$ cat test.c
#include <gtk/gtk.h>
#include <X11/Xlib.h>
int foo(void){return !gtk_major_version || !XOpenDisplay(0);}
$ gcc -fpic -shared test.c -o test.so $(pkg-config --cflags gtk+-2.0) -lgtk-x11-2.0
$ /usr/lib/rpm/lib.req test.so
rtld(GNU_HASH)
libc.so.6(GLIBC_2.2.5)(64bit)
lib.req: WARNING: /usr/src/tmp/test.so: underlinked libraries: /usr/lib64/libX11.so.6
lib.req: WARNING: libgtk-x11-2.0.so.0()(64bit) is not yet set-versioned
libgtk-x11-2.0.so.0()(64bit)
$ readelf -d test.so |fgrep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libgtk-x11-2.0.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
И ещё пример:
$ cat test.c
#include <X11/Xlib.h>
int foo(void){return !XOpenDisplay(0);}
$ gcc -fpic -shared test.c -o test.so $(pkg-config --cflags gtk+-2.0) -Wl,--no-as-needed -lgtk-x11-2.0
$ /usr/lib/rpm/lib.req test.so
rtld(GNU_HASH)
libc.so.6(GLIBC_2.2.5)(64bit)
lib.req: WARNING: /usr/src/tmp/test.so: overlinked libraries: /usr/lib64/libgtk-x11-2.0.so.0
lib.req: WARNING: /usr/src/tmp/test.so: underlinked libraries: /usr/lib64/libX11.so.6
libgtk-x11-2.0.so.0()(64bit)
$ readelf -d test.so |fgrep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libgtk-x11-2.0.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
Только откуда следует, что это поведение ld(1) неправильное?
--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20101006/edf6358b/attachment.bin>
Подробная информация о списке рассылки Devel