对符号‘exp@@GLIBC_2.2.5’的未定义引用

对符号‘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

在许多网站上,给出的解决方案是添加一些标志(例如这里这里)但它们对我都不起作用。

这里是 Makefile,这里是 CMakeLists.txt 和这里是 CMakeCache.txt。

答案1

似乎找到解决方案的用户后来从未分享过它。对于试图找到解决方案的人,只需明确添加数学库,并添加-ldl

因此-lm-ldl在您编译的行中gcc,一切都应该顺利进行。

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

例子:

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

答案2

我已经添加了-lmCMakeLists.txt的分配位置。现在它可以正常工作了。

答案3

我发现这个帖子有类似的问题。明确地说,解决方案是在 CMakeLists.txt 文件中找到并进行更改:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})

相关内容