niezdefiniowane odniesienie do symbolu „exp @@ GLIBC_2.2.5”

11

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.

Oto Makefile, tutaj CMakeLists.txt, a tutaj CMakeCache.txt.

Shashwat
źródło
Jaka jest twoja wersja glibc?
nixeagle
ldd --versiondał (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat
Podaj swój plik Makefile. Jest to wyraźnie coś z uszkodzonymi zależnościami biblioteki (i możliwymi niezgodnościami wersji glib).
nixeagle
2
Czy na pewno próbowałeś dodać -lm? Gdzie to dodałeś?
muru
@Shashwat: Gdzie dokładnie to dodałeś? Czy możesz napisać kod? Dzięki

Odpowiedzi:

8

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 -lmi -ldlw gcclinii kompilujesz i powinno pójść dobrze.

Alternatywnie, w większości przypadków możesz również wyraźnie zdefiniować CFLAGSi złagodzić problem w ten sposób. To tylko dwa sposoby rozwiązania,

Przykład:

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

Dodałem -lmdo CMakeLists.txtgdzie biblioteki są przypisane. Już działa.

Shashwat
źródło
4
Czy możesz szczegółowo pokazać dodatek? Dziękuję
Lucio
3

Znalazłem ten wątek z podobnym problemem. Jawnie rozwiązaniem jest znalezienie i zmiana w pliku CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

do

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
hiddeninthewifi
źródło