você deve usar -lm
no final.
porque os símbolos não resolvidos são encontrados depois que o gcc encontra montecarlo_time.o
e não há biblioteca ou qualquer outra coisa na qual ele possa descobrir que pode resolver esse símbolo.
Acabei de instalar o Ubuntu 12.04 LTS e estou tendo problemas para vincular as funções matemáticas (de). Eu tenho o gcc instalado e capaz de compilar a fonte bem. No entanto, tentando:
gcc -lm montecarlo_time.o parsercfile.o -o trmcfl
Dá vários erros no formulário:
montecarlo_time.o: In function 'main:
/home/karthik/Research/MC/trmcfl/Dumps/whiteScaling/18-Sep-2012/montecarlo_time.c:75: undefined reference to asin'
No entanto, todos esses arquivos estão presentes (e visíveis no ldconfig -v -N)
/lib/i386-linux-gnu/libm.so.6
/lib64/libm.so.6
/usr/lib/i386-linux-gnu/libm.a
/usr/lib/i386-linux-gnu/libm.so
/usr/lib/i386-linux-gnu/xen/libm.a
/usr/lib64/libm.a
/usr/lib64/libm.so
Por que a vinculação está falhando?
você deve usar -lm
no final.
porque os símbolos não resolvidos são encontrados depois que o gcc encontra montecarlo_time.o
e não há biblioteca ou qualquer outra coisa na qual ele possa descobrir que pode resolver esse símbolo.
Eu tenho sempre digitado gcc -lm file.c
; Até a versão mais recente do Ubuntu, isso funcionou. Na internet, vejo sugestões de que é um estilo ruim, mas funciona. Parece que isso mudou agora.