Подобный вопрос задали здесь, но является оставшимся без ответа.
У меня есть реализация Levenberg-Marquardt
(загруженный с где-нибудь), и я пытаюсь скомпилировать его, но получаю следующую ошибку.
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
На многих сайтах данное решение состояло в том, чтобы добавить некоторые флаги (например, здесь и здесь). Но ни один из них не работал на меня.
Здесь Make-файл, здесь CMakeLists.txt и здесь CMakeCache.txt.
Я добавил -lm
в CMakeLists.txt
, где библиотекам присваивают. Это работает теперь.
Походит на пользователя, который нашел, что решение никогда не совместно использовало его позже. Для парней, которые пытаются найти, решение просто добавляет математическую библиотеку явно и также добавляет -ldl
Так -lm
и -ldl
в gcc
строка, которую Вы компилируете, и это должно пойти очень хорошо.
, С другой стороны, в большинстве случаев можно также явно определить CFLAGS
и облегчить проблему тот путь. Это всего два способа решить,
Пример:
user@compiler-shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";
Я нашел этот поток с подобной проблемой. Явно, решение состоит в том, чтобы найти и измениться в Вашем файле CMakeLists.txt:
TARGET_LINK_LIBRARIES(lmdemo ${LIBS})
к
TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})