[devel] --as-needed

Dmitry V. Levin ldv на altlinux.org
Пн Мар 6 16:22:03 MSK 2006


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 оно будет убрано как
ненужное.

Я пока не знаю, как быть.


-- 
ldv
----------- следущая часть -----------
j e┴ф╜┼┴Ъ╕
l┼	з╤ЙчвщT╝Xm╤÷Ъ√+-╠╘m√)Нф┼ЮЧ≤╘z╧ ┼_щzВ╔Щ╚miхfz{lЪm4КMТКВ<Внzwoз╤ж°├g╖╣╦╖


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