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

11

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

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

На многих сайтах было предложено добавить несколько флагов (например, здесь и здесь ). Но никто из них не работал для меня.

Вот Makefile, вот CMakeLists.txt, а вот CMakeCache.txt.

Shashwat
источник
Какая у вас версия glibc?
nixeagle
ldd --versionдал (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Шашват
Пожалуйста, включите ваш Makefile. Это явно что-то со сломанными библиотечными зависимостями (и возможными несоответствиями версии glib).
nixeagle
2
Вы уверены, что пытались добавить -lm? Где ты это добавил?
Муру
@Shashwat: Где именно ты это добавил? Можете ли вы опубликовать код? Спасибо

Ответы:

8

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

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

Shashwat
источник
4
Можете ли вы показать дополнение в деталях? Спасибо
Лусио
3

Я нашел эту тему с похожей проблемой. Явным решением является поиск и изменение файла CMakeLists.txt:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

в

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
hiddeninthewifi
источник