未定义对符号'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

在许多站点,给出的解决方案是添加一些标志(例如,herehere)。但是他们都没有为我工作。

是Makefile,是CMakeLists.txt,是CMakeCache.txt。


您的glibc版本是什么?
nixeagle14年

ldd --version给了(Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19
Shashwat 2014年

请包括您的Makefile。显然,这是库依赖项损坏的问题(可能还有glib版本不匹配)。
nixeagle 2014年

2
确定要添加-lm吗?您在哪里添加的?
穆鲁

@Shashwat:您到底在哪里添加了这个?你能发布代码吗?谢谢

Answers:


8

似乎发现解决方案的用户以后再也不会共享它。对于试图找到解决方案的人,只需显式添加数学库,然后添加-ldl

所以-lm-ldlgcc行正在编译,它应该去就好了。

或者,在大多数情况下,您也可以通过CFLAGS这种方式明确定义和缓解问题。这只是两种解决方法,

例:

user@compiler-shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";

6

我已经添加-lmCMakeLists.txt分配库的位置。现在正在工作。


4
您可以详细显示添加内容吗?谢谢
Lucio

3

我发现这个线程也有类似的问题。明确地说,解决方案是在CMakeLists.txt文件中查找和更改:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.