对符号“exp@@GLIBC_2.2.5”的未定义引用

Sha*_*wat 11 compiling make ld cmake

类似的问题已被问到here,但没有得到答复。

我有一个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
Run Code Online (Sandbox Code Playgroud)

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

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

小智 13

似乎找到解决方案的用户后来再也没有分享过。对于试图找到解决方案的人,只需显式添加数学库并添加-ldl

因此-lm-ldlgcc您正在编译的行中,它应该没问题。

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

例子:

user@compiler-shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";
Run Code Online (Sandbox Code Playgroud)


Sha*_*wat 9

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

  • 你能详细说明添加吗?谢谢 (4认同)

小智 6

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

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})
Run Code Online (Sandbox Code Playgroud)

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
Run Code Online (Sandbox Code Playgroud)