Problemas matemáticos del enlazador matemático en Ubuntu 11.10
gcc linker (5)
Apareció un extraño error después de actualizar mi Ubuntu de (10.11, 11.04 i dont know)
a 11.10.
Obtengo una undefined reference to ''sqrt''
al usar math.h y enlazar con -lm
Estoy compilando con gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o
ambos archivos fuente usan e incluyen math.h.
Este código se compiló sin problemas y no cambié mucho desde la actualización, pero ahora no funcionará.
¿Tiene alguna sugerencia de lo que puedo hacer para encontrar el error?
Lo siento, si esta pregunta fue hecha antes; hay tantas publicaciones sobre errores de enlazador matemático y no encontré una coincidencia
Encontré el mismo problema después de actualizar mi Ubuntu a la versión 11.10. Utilizo Netbeans para desarrollar y resolver el problema especificando la biblioteca estándar "Matemáticas" como sigue:
Haga clic derecho en el proyecto, haga clic en Propiedades, seleccione "Enlazador" en el menú, haga clic en "Bibliotecas" y luego "Agregar biblioteca estándar", eligiendo "Matemáticas".
Al compilar, la opción ''-lm'' se coloca después de todas las otras opciones y funciona. Probablemente, esta versión de gcc sigue una arquitectura específica y espera que las bibliotecas se encuentren al final de la línea de compilación del comando.
¡Aclamaciones!
RE.
Este es un problema debido a la activación predeterminada de la bandera gcc, --as-needed
en el enlazador
Más información aquí: http://www.gentoo.org/proj/en/qa/asneeded.xml
Solución simple (al menos para mí):
Agregue -Wl,--no-as-needed
al vinculador
La biblioteca que está utilizando debe ubicarse después de los archivos que la utilizan cuando la usa desde la línea de comandos. Entonces coloque -lm
después de sus archivos C en la línea de comando.
¡RESUELTO , este no es el problema común de falta! ¡Estoy en la misma situación después de la actualización a (k) ubuntu 11.10!
$ whereis math.h
math: /usr/include/math.h
Makefile:
CC=gcc
CFLAGS=--std=c99 -g -pedantic -Wall -lm
uname:
Linux idefix 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
Realmente TIENE que colocar el parámetro -lm swith after -o foo foo.c
Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$
¡Cambia tus banderas en Makefile! CHICOS ¡Esto es BUG bastante nuevo (y serio)!
cc filename.c -lm
solo intente .......... ☻