Referência indefinida a funções matemáticas ao vincular com o gcc

1

Estou recebendo um erro ao usar o make para instalar um programa. A etapa completa em que ele falha com erro se parece com isso:

gcc  -g -O2 -fopenmp -L/usr/lib -lcfitsio -lm  -o lenstool_tab e_nfwg.o lenstool_tab.o midpnt.o nrutil.o polint.o qromo.o read_bin.o lenstool_tab.o: In function 'main':
/usr/local/src/lenstool-6.8/table_src/lenstool_tab.c:73: undefined reference to 'log'
/usr/local/src/lenstool-6.8/table_src/lenstool_tab.c:73: undefined reference to 'log'
e_nfwg.o: In function 'surfdens2':
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:133: undefined reference to 'pow'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:130: undefined reference to 'sin'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:138: undefined reference to 'pow'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:140: undefined reference to 'sin'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:140: undefined reference to 'pow'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:144: undefined reference to 'sin'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:144: undefined reference to 'pow'
e_nfwg.o: In function 'nfwg_kappa':
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:63: undefined reference to 'pow'
e_nfwg.o: In function 'scmass':
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:165: undefined reference to 'pow'
collect2: error: ld returned 1 exit status
make[1]: *** [lenstool_tab] Error 1
make[1]: Leaving directory '/usr/local/src/lenstool-6.8/table_src'
make: *** [all-recursive] Error 1

Então, obviamente, há um problema com a vinculação à biblioteca de matemática. Verifiquei se esses códigos contêm #include<math.h> . A principal causa deste problema parece ser a falta de -lm no comando compile, mas como você pode ver, aparece no exemplo acima. Eu adicionei o -lm a várias partes do makefile que pareciam apropriadas, mas isso não ajudou. Estou incluindo o makefile aqui caso isso ajude. Devo estar modificando o makefile para corrigir isso? Eu procurei esse problema na Web, mas nenhuma resposta pareceu considerar o makefile. Eu li uma sugestão em outro segmento para modificar config.status para incluir -lm , mas não ficou claro onde fazer isso. Eu instalei este programa em um Mac antes sem problema, mas agora estou usando o Ubuntu 14 e recebo esse erro. Qualquer ajuda é muito apreciada! Obrigado.

    
por relo 17.07.2015 / 23:44

1 resposta

4

As bibliotecas que estão sendo vinculadas devem ser especificadas após , há uma referência a elas. Assim, você irá alterar o comando para:

gcc  -g -O2 -fopenmp -L/usr/lib  -o lenstool_tab e_nfwg.o lenstool_tab.o midpnt.o nrutil.o polint.o qromo.o read_bin.o lenstool_tab.o -lcfitsio -lm

Isso deve resolver seu problema. Você pode possivelmente corrigir o problema em seu Makefile para que as bibliotecas sejam especificadas posteriormente.

    
por 17.07.2015 / 23:56

Tags