Главная страница


ru.unix

 
 - RU.UNIX ----------------------------------------------------------------------
 From : Valentin Nechayev                    2:5020/400     29 Dec 2000  16:47:52
 To : Alex Korchmar
 Subject : Re: научите пользоваться g++
 -------------------------------------------------------------------------------- 
 
         Hello Alex Korchmar!
 
 AK> В процессе ковыряния с некоторой программой обнаружился неприятный 
 AK> момент - я как-то не очень понимаю, откуда g++ берет библиотеки, с которыми
 AK> линкует бинарник и, главное - как ему об'яснить, что мне нужны другие?
 AK> gcc берет все из spec'а - но вот откуда берется libstdc++ ?
 
 AK> (основное, чего ради я трахаюсь - очень хотелось бы отучить
 AK> эту тварь линковаться динамически с чем-нибудь асболютно бредовым, типа
 AK> libstdc++-libc6-2.2.9.9.9876.so, расплодившимся в последних версиях
 AK> линукса.)
 
 Что ж, проводим диагностику. (Аж самому понравилось;))
 
 netch@sleipnir:~/gppt>ldd gppt
         libstdc++-libc6.1-1.so.2 => /usr/lib/libstdc++-libc6.1-1.so.2
 (0x40018000)
         libm.so.6 => /lib/libm.so.6 (0x4005a000)
         libc.so.6 => /lib/libc.so.6 (0x40077000)
         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
 
 Поставил вместо /usr/bin/ld скрипт, который
 печатает параметры и вызывает реальный ld, и получил:
 
 netch@sleipnir:~/gppt>make
 g++    -c main.cc -o main.o
 g++ -o gppt main.o
 ld args: -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o gppt /usr/lib/crt1.o
 /usr/lib/crti.o /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtbegin.o -L/us
 r/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66 -L/usr/i386-redhat-linux/lib main.o
  -lstdc++ -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cr
 tend.o /usr/lib/crtn.o
 
 и в списке -L каталогов, libstdc++ найдена в первом:
 
 root@sleipnir:/usr/bin#ls /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66
 SYSCALLS.c.X  collect2    crtbeginS.o  include     libstdc++.a
 cc1           cpp         crtend.o     libgcc.a    libstdc++.so
 cc1plus       crtbegin.o  crtendS.o    libgcc.map  specs
 
 Далее,
 
 root@sleipnir:/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66#file libstdc++*
 libstdc++.a:  symbolic link to ../../../libstdc++-libc6.1-1.a.2
 libstdc++.so: symbolic link to ../../../libstdc++-libc6.1-1.so.2
 
 Понятно, что ../../../ относительно этого каталога есть /usr/lib.
 Вывод - ld подбирает симлинк и втыкает в бинарник то имя, на которое
 показывает симлинк. Подтверждение:
 
 netch@sleipnir:~/gppt>strings gppt | grep libstdc++
 libstdc++-libc6.1-1.so.2
 
 Это все при:
 
 root@sleipnir:/usr/bin#rpm -qf
 /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/libstdc++.so
 egcs-c++-1.1.2-24
 netch@sleipnir:~/gppt>rpm -qa | grep egcs
 egcs-1.1.2-24
 egcs-c++-1.1.2-24
 netch@sleipnir:~/gppt>cat /etc/redhat-release
 Red Hat Linux release 6.1 (Cartman)
 (хотя куча пакетов проапгрейжена)
 
 Hа седьмом редхате я не тестировал, но уверен, что тот же метод тестирования
 пройдет и там ;) Или снять с него показания?
 P.S. В процессе получил странный эффект - при стандартном для редхата
 назначении руту alias rm='rm -i', при rm из
 root@sleipnir:/usr/bin#rpm -qf /bin/rm
 fileutils-4.0-8
 
 никакие ответы y или yes не помогают.
 /netch
 --- ifmail v.2.15dev5
  * Origin: Lucky Netch Incorporated (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: научите пользоваться g++   Valentin Nechayev   29 Dec 2000 16:47:52 
 научите пользоваться g++   Slawa Olhovchenkov   30 Dec 2000 00:05:18 
 Re: научите пользоваться g++   Valentin Nechayev   30 Dec 2000 01:58:20 
 научите пользоваться g++   Serge Ryabchun   30 Dec 2000 02:40:46 
 Re: научите пользоваться g++   Valentin Nechayev   30 Dec 2000 20:28:29 
Архивное /ru.unix/913802fe3784.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional