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.
ldd --version
gab(Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19
.-lm
? Wo hast du es hinzugefügt?Antworten:
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
-lm
und-ldl
in dergcc
Zeile, die Sie kompilieren, sollte es gut gehen.Alternativ können Sie
CFLAGS
das Problem in den meisten Fällen auch explizit auf diese Weise definieren und beheben. Dies sind nur zwei Arten der Lösung:Beispiel:
quelle
Ich habe hinzugefügt ,
-lm
inCMakeLists.txt
denen Bibliotheken zugewiesen werden. Es funktioniert jetzt.quelle
Ich habe diesen Thread mit einem ähnlichen Problem gefunden. Die Lösung besteht explizit darin, Ihre CMakeLists.txt-Datei zu finden und zu ändern:
zu
quelle