c gcc ubuntu linker math.h

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.

Reference


¡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 .......... ☻