it-swarm.com.de

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

Eine ähnliche Frage wurde gestellt hier ist aber unbeantwortet.

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

[email protected]:~/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 '[email protected]@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.

9
Shashwat

Ich habe -lm zu CMakeLists.txt hinzugefügt, wo Bibliotheken zugewiesen werden. Es funktioniert jetzt.

6
Shashwat

Scheint, als hätte der Benutzer, der die Lösung gefunden hat, sie später nie freigegeben. Für Leute, die versuchen, die Lösung zu finden, fügen Sie einfach die Mathematikbibliothek explizit hinzu und fügen Sie auch -ldl hinzu.

Also -lm und -ldl in der gcc Zeile, die Sie kompilieren, und es sollte gut gehen.

Alternativ können Sie in den meisten Fällen auch CFLAGS explizit definieren und das Problem auf diese Weise beheben. Dies sind nur zwei Möglichkeiten,

Beispiel:

[email protected]$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";
6

Ich habe diesen Thread mit einem ähnlichen Problem gefunden. Die Lösung besteht ausdrücklich darin, in Ihrer CMakeLists.txt-Datei Folgendes zu suchen und zu ändern:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

zu

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
3
hiddeninthewifi