undefinierter Verweis auf Symbol 'exp @@ GLIBC_2.2.5'

11

Eine ähnliche Frage wurde hier gestellt , ist aber unbeantwortet.

Ich habe eine Implementierung von Levenberg-Marquardt(von irgendwo heruntergeladen) und versuche sie zu kompilieren, erhalte aber den folgenden Fehler.

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

An vielen Standorten bestand die Lösung darin, einige Flags hinzuzufügen (z. B. hier und hier ). Aber keiner von ihnen hat für mich gearbeitet.

Hier ist das Makefile, hier ist die CMakeLists.txt und hier ist die CMakeCache.txt.

Shashwat
quelle
Was ist deine glibc Version?
Nixeagle
ldd --versiongab (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat
Bitte fügen Sie Ihr Makefile bei. Dies ist eindeutig etwas mit defekten Bibliotheksabhängigkeiten (und möglichen Nichtübereinstimmungen der Glib-Version).
Nixeagle
2
Sind Sie sicher, dass Sie versucht haben, etwas hinzuzufügen -lm? Wo hast du es hinzugefügt?
Muru
@ Shashwat: Wo genau hast du das hinzugefügt? Können Sie bitte den Code posten? Danke

Antworten:

8

Der Benutzer, der die Lösung gefunden hat, scheint sie später nie mehr geteilt zu haben. Für Leute, die versuchen, die Lösung zu finden, fügen Sie einfach die Mathematikbibliothek explizit hinzu und fügen Sie auch hinzu-ldl

Also -lmund -ldlin der gccZeile, die Sie kompilieren, sollte es gut gehen.

Alternativ können Sie CFLAGSdas Problem in den meisten Fällen auch explizit auf diese Weise definieren und beheben. Dies sind nur zwei Arten der Lösung:

Beispiel:

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

Ich habe hinzugefügt , -lmin CMakeLists.txtdenen Bibliotheken zugewiesen werden. Es funktioniert jetzt.

Shashwat
quelle
4
Können Sie den Zusatz im Detail zeigen? Vielen Dank
Lucio
3

Ich habe diesen Thread mit einem ähnlichen Problem gefunden. Die Lösung besteht explizit darin, Ihre CMakeLists.txt-Datei zu finden und zu ändern:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

zu

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
verstecktinthewifi
quelle