referencia indefinida al símbolo 'exp @@ GLIBC_2.2.5'


11

Una pregunta similar se ha hecho aquí pero no tiene respuesta.

Tengo una implementación de Levenberg-Marquardt(descargada de algún lugar) y estoy tratando de compilarla, pero obtengo el siguiente error.

gauravloj@vertex:~/Documents/source_code/non-rigid_registration/Gauss_newton/levmar-2.6$ make
[ 87%] Built target levmar
Linking C executable lmdemo
/usr/bin/ld: CMakeFiles/lmdemo.dir/lmdemo.c.o: undefined reference to symbol 'exp@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [lmdemo] Error 1
make[1]: *** [CMakeFiles/lmdemo.dir/all] Error 2
make: *** [all] Error 2

En muchos sitios, la solución dada fue agregar algunas banderas (por ejemplo, aquí y aquí ). Pero ninguno de ellos funcionó para mí.

Aquí está el Makefile, aquí está el CMakeLists.txt y aquí está el CMakeCache.txt.


¿Cuál es tu versión de glibc?
nixeagle

ldd --versiondio (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat

Por favor incluya su Makefile. Esto es claramente algo con dependencias de biblioteca rotas (y posibles desajustes de versión de glib).
nixeagle

2
¿Estás seguro de que has intentado agregar -lm? ¿Dónde lo agregaste?
muru

@ Shashwat: ¿Dónde exactamente agregaste esto? ¿Puedes publicar el código? Gracias

Respuestas:


8

Parece que el usuario que encontró la solución nunca la compartió más tarde. Para los chicos que están tratando de encontrar la solución, simplemente agreguen la biblioteca matemática explícitamente y también agreguen-ldl

Por lo tanto -lm, y -ldlen la gcclínea que se está compilando y debe ir muy bien.

Alternativamente, en la mayoría de los casos, también puede definir explícitamente CFLAGSy aliviar el problema de esa manera. Estas son solo dos formas de resolver,

Ejemplo:

user@compiler-shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";

6

He agregado -lma CMakeLists.txtdónde se asignan las bibliotecas. Está funcionando ahora.


44
¿Puedes mostrar la adición en detalle? Gracias
Lucio

3

Encontré este hilo con un problema similar. Explícitamente, la solución es encontrar y cambiar en su archivo CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

a

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.