riferimento indefinito al simbolo "exp @@ GLIBC_2.2.5"


11

Una domanda simile è stata posta qui ma non ha risposta.

Ho un'implementazione di Levenberg-Marquardt(scaricato da qualche parte) e sto provando a compilarlo ma ricevo il seguente errore.

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

In molti siti, la soluzione fornita è stata quella di aggiungere alcuni flag (ad esempio qui e qui ). Ma nessuno di loro ha funzionato per me.

Ecco il Makefile, ecco CMakeLists.txt ed ecco CMakeCache.txt.


Qual è la tua versione di glibc?
nixeagle,

ldd --versionha dato (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat,

Includi il tuo Makefile. Questo è chiaramente qualcosa con dipendenze di libreria interrotte (e possibili disallineamenti della versione glib).
nixeagle,

2
Sei sicuro di aver provato ad aggiungere -lm? Dove l'hai aggiunto?
muru,

@Shashwat: dove l'hai aggiunto esattamente? Puoi per favore pubblicare il codice? Grazie

Risposte:


8

Sembra che l'utente che ha trovato la soluzione non l'abbia mai condivisa in seguito. Per i ragazzi che stanno cercando di trovare la soluzione, aggiungi esplicitamente la libreria matematica e aggiungi-ldl

Quindi, -lme -ldlin gcclinea, stai compilando e dovrebbe andare bene.

In alternativa, nella maggior parte dei casi puoi anche definire CFLAGSe alleviare esplicitamente il problema in questo modo. Questi sono solo due modi di risolvere,

Esempio:

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

6

Ho aggiunto -lmin CMakeLists.txtcui vengono assegnate le librerie. Sta lavorando adesso.


4
Puoi mostrare l'aggiunta in dettaglio? Grazie
Lucio,

3

Ho trovato questa discussione con un problema simile. In modo esplicito, la soluzione è trovare e modificare il file CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

per

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.