Podobne pytanie zostało zadane tutaj, ale nie ma odpowiedzi.
Mam implementację Levenberg-Marquardt
(pobraną skądś) i próbuję ją skompilować, ale pojawia się następujący błąd.
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
W wielu witrynach rozwiązaniem było dodanie niektórych flag (np. Tutaj i tutaj ). Ale żaden z nich nie działał dla mnie.
ldd --version
dał(Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19
.-lm
? Gdzie to dodałeś?Odpowiedzi:
Wygląda na to, że użytkownik, który znalazł rozwiązanie, nie udostępnił go później. Dla facetów, którzy próbują znaleźć rozwiązanie, po prostu dodaj bibliotekę matematyczną, a także dodaj
-ldl
Tak
-lm
i-ldl
wgcc
linii kompilujesz i powinno pójść dobrze.Alternatywnie, w większości przypadków możesz również wyraźnie zdefiniować
CFLAGS
i złagodzić problem w ten sposób. To tylko dwa sposoby rozwiązania,Przykład:
źródło
Dodałem
-lm
doCMakeLists.txt
gdzie biblioteki są przypisane. Już działa.źródło
Znalazłem ten wątek z podobnym problemem. Jawnie rozwiązaniem jest znalezienie i zmiana w pliku CMakeLists.txt:
do
źródło