[devel] --as-needed

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Пн Мар 6 18:56:11 MSK 2006


On Mon, Mar 06, 2006 at 06:37:33PM +0300, Sergey Vlasov wrote:
> On Mon, Mar 06, 2006 at 04:22:03PM +0300, Dmitry V. Levin wrote:
> > On Mon, Mar 06, 2006 at 03:08:44PM +0300, Dmitry V. Levin wrote:
> > > On Mon, Mar 06, 2006 at 10:36:26AM +0500, Andrey Rahmatullin wrote:
> > > > On Mon, Mar 06, 2006 at 06:09:40AM +0300, QA Team Robot wrote:
> > > > > - Pass --as-needed option to GNU ld by default.
> > > > И никто не сломался? ;)
> > > 
> > > Это мы сейчас изучаем...
> > 
> > Много чего может сломаться.  Вот несколько искусственный пример, полученный
> > путём усушки реального случая:
> > 
> > $ cat zv.c
> > #include <zlib.h>
> > int main(void) { return !zlibVersion(); }
> > $ gcc -c zv.c
> > $ ld --as-needed --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o zv /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i586-alt-linux/3.4.4/crtbegin.o -L/usr/lib/gcc/i586-alt-linux/3.4.4 -L/usr/lib zv.o -lz -lc /usr/lib/gcc/i586-alt-linux/3.4.4/crtend.o /usr/lib/crtn.o
> > $ ld --as-needed --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o zv /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i586-alt-linux/3.4.4/crtbegin.o -L/usr/lib/gcc/i586-alt-linux/3.4.4 -L/usr/lib -lz zv.o -lc /usr/lib/gcc/i586-alt-linux/3.4.4/crtend.o /usr/lib/crtn.o
> > zv.o: In function `main':zv.c:(.text+0x23): undefined reference to `zlibVersion'
> > 
> > Первый ld отличается от второго порядком файлов:
> > в первом "zv.o -lz", во втором "-lz zv.o".
> > 
> > Такое поведение ld не является ошибкой, в режиме --as-needed порядок может
> > повлиять на значение: если библиотека (здесь -lz) следует до первого
> > пользователя (здесь zv.o), то в режиме --as-needed оно будет убрано как
> > ненужное.
> 
> Собственно, со статическими библиотеками так всегда и было (только ещё
> хуже - могла вытащиться часть, которой потом не хватало для остального).

В том то и дело: --as-needed просто делает работу со динамическими
библиотеками аналогичной работе со статическими библиотеками.

> > Я пока не знаю, как быть.
> 
> Сколько пакетов от этого перестало собираться?

Тестовая сборка ещё не завершилась.  Речь идёт о сотне-другой
несобирающихся пакетах, и ещё некотором числе собирающихся неправильно
разделяемых библиотек, о которых verify-elf ругается про undefined
symbols.  Результаты будут разосланы.  Я попробую выявить закономерности.

Пока что я склоняюсь к тому, чтобы НЕ откатывать это изменение.


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 191 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20060306/cfbde130/attachment-0001.bin>


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