[sisyphus] binutils problem?

Ivan Adzhubey =?iso-8859-1?q?iadzhubey_=CE=C1_rics=2Ebwh=2Eharvard=2Eedu?=
Вт Апр 25 07:25:39 MSD 2006


On Monday 24 April 2006 23:17, Alexey Tourbin wrote:
> On Mon, Apr 24, 2006 at 11:05:35PM -0400, Ivan Adzhubey wrote:
> > On Monday 24 April 2006 23:03, Alexey Tourbin wrote:
> > > On Mon, Apr 24, 2006 at 10:56:51PM -0400, Ivan Adzhubey wrote:
> > > > # nm /usr/lib/libm.so
> > > > nm: /usr/lib/libm.so: no symbols
> > >
> > > nm -D
> >
> > Спасибо за наводку, так работает. Это изменение в nm?
>
> Нет, всегда так было.
> Кажется, nm штука древняя и без опций "правильно" работает с *.a архивами.
>
> > Надо править configure
> > скрипты? Подскажите пожалуйста, если у вас есть опыт, а то у меня - нет,
> > а собрать надо срочно!
>
> А зачем это вообще для сборки нужно?  Там наверное можно целый кусок
> закомментировать, если понять, чего он хочет и что ему на самом деле нужно.

Да вот я никак и не могу понять, чего же ему нехватает... Тест, который не 
проходит, очень простой: собирается тестовая программа, которая содеожит в 
main() вызовы всех функций, определенных в тестируемой библиотеке (libgoto, 
оптимизированная библиотека линейной алгебры), затем эта тестовая программа 
линкуется со свежесобранной библиотекой. В самой библиотеке есть вызоовы к 
стандартной libm (sqrt() например), линкуется это все конечно с флагом -lm. 
Но линковка все равно обламывается:

./gensymbol linktest _ > linktest.c
gcc -O2  -Wall -fPIC  -DF_INTERFACE_F2C -DNEED_F2CCONV -DSMP_SERVER -pthread -DMAX_CPU_NUMBER=2 -DASMNAME= -DASMFNAME=_ -DNAME=_ -DCNAME= -DBUNDERSCORE=_ -DNEEDBUNDERSCORE -I.. -DARCH_X86 -DPENTIUM4 -DL1_DATA_SIZE=8192 -DL1_DATA_LINESIZE=64 -DL2_SIZE=524288 -DL2_LINESIZE=64 -DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 -DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2  -DCORE_NORTHWOOD -w -o /dev/null 
linktest.c ../libgoto_northwoodp-r1.02.so -lpthread -lm && echo OK.
../libgoto_northwoodp-r1.02.so: undefined reference to `sqrt'
collect2: ld returned 1 exit status
make: *** [test] Error 1

Наверное можно и проще, слинковать что-то типа:

int main(void){
sqrt();
return 0;}

Сейчас попробую. Что-то я совсем не понимаю, что происходит...

-- 
Иван



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