неопределенная ссылка на символ 'exp @@ GLIBC_2.2.5'

Подобный вопрос задали здесь, но является оставшимся без ответа.

У меня есть реализация 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.

10
задан 13 April 2017 в 05:24

3 ответа

Я добавил -lm в CMakeLists.txt, где библиотекам присваивают. Это работает теперь.

7
ответ дан 23 November 2019 в 04:25

Походит на пользователя, который нашел, что решение никогда не совместно использовало его позже. Для парней, которые пытаются найти, решение просто добавляет математическую библиотеку явно и также добавляет -ldl

Так -lm и -ldl в gcc строка, которую Вы компилируете, и это должно пойти очень хорошо.

, С другой стороны, в большинстве случаев можно также явно определить CFLAGS и облегчить проблему тот путь. Это всего два способа решить,

Пример:

user@compiler-shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";
6
ответ дан 23 November 2019 в 04:25

Я нашел этот поток с подобной проблемой. Явно, решение состоит в том, чтобы найти и измениться в Вашем файле CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

к

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
4
ответ дан 23 November 2019 в 04:25

Другие вопросы по тегам:

Похожие вопросы: