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 > > 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