Foros del Web » Programación para mayores de 30 ;) » C/C++ »

undefined reference to 'sqrt' u otra función matemática al pasarle una variable

Estas en el tema de undefined reference to 'sqrt' u otra función matemática al pasarle una variable en el foro de C/C++ en Foros del Web. Hola, estoy utilizando el compilador de Ubuntu, he incluido las librerías stdio y math, y el problema viene al intentar pasarle una variable a una ...
  #1 (permalink)  
Antiguo 25/02/2010, 10:17
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
undefined reference to 'sqrt' u otra función matemática al pasarle una variable

Hola,

estoy utilizando el compilador de Ubuntu, he incluido las librerías stdio y math, y el problema viene al intentar pasarle una variable a una función matemática.

Es decir, sqrt(16) me funciona, pero si hago sqrt (x) falla. He intentado ya todo, poner x como entera, como doble... y nada.

Lo mismo me ocurre con otras funciones matemáticas como pow, que si les paso una variable me da error al compilar.

¿Cómo solucionarlo?
  #2 (permalink)  
Antiguo 25/02/2010, 10:21
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Respuesta: undefined reference to 'sqrt' u otra función matemática al pasarle una var

Ya lo he solucionado. La solución la he sacado de http://sourceware.org/ml/glibc-linux.../msg00090.html

El problema era que había que "linkar" la librería matemática. Es decir, yo hacía
gcc calculo1.c
y tenía que hacer
gcc calculo1.c -ln

¿Alguien me puede decir si esto de -ln hay que aplicarlo a todas las librerías? ¿Qué hacía mal compilando?

Tenía entendido que en las últimas versiones del compilador de Ubuntu, gcc te hacía el compilado, linkado, etc. de una sola pasada.
  #3 (permalink)  
Antiguo 25/02/2010, 14:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: undefined reference to 'sqrt' u otra función matemática al pasarle una var

pues, solo es con esa librería, y solo si compilas C si compilas c++ no es necesario
  #4 (permalink)  
Antiguo 25/02/2010, 17:02
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Respuesta: undefined reference to 'sqrt' u otra función matemática al pasarle una var

Cita:
Iniciado por Froroth Ver Mensaje
pues, solo es con esa librería, y solo si compilas C si compilas c++ no es necesario
Ah ok, gracias.

¿Es algún tipo de bug, entonces? No creo, pero normal normal tampoco me parece...

O sea que -ln para la de matemáticas. ¿Y qué es?
  #5 (permalink)  
Antiguo 26/02/2010, 05:28
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 16 años
Puntos: 6
Respuesta: undefined reference to 'sqrt' u otra función matemática al pasarle una var

Buenas,

Esto si es normal. Con '-lX' le dices al compilador que cargue la librería X que, en el caso de las matemáticas, es 'm', es decir, '-lm'.

Según tengo entendido, esto sucede porque la librería math no está en la misma carpeta que el programa o el compilador. Por ese motivo, tienes que especificarle que la cargue (el compilador si tiene una lista de directorios donde hay librerías).

Saludos
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #6 (permalink)  
Antiguo 26/02/2010, 06:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: undefined reference to 'sqrt' u otra función matemática al pasarle una var

lo raro es que por lo regular las librerías estándar no se necesitan enlazar
  #7 (permalink)  
Antiguo 28/02/2010, 13:54
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Respuesta: undefined reference to 'sqrt' u otra función matemática al pasarle una var

Me ha quedado totalmente claro. ¡Muchas gracias a los dos!

Etiquetas: reference, undefined, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.