‘exp @@ GLIBC_2.2.5’심볼에 대한 정의되지 않은 참조 symbol ‘exp@@GLIBC_2.2.5’ //lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO

비슷한 질문이 여기에 있지만 답변되지 않았습니다.

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입니다.



답변

솔루션을 찾은 사용자가 나중에 솔루션을 공유하지 않은 것처럼 보입니다. 솔루션을 찾으려고하는 사람들에게는 수학 라이브러리를 명시 적으로 추가하고 추가하십시오.-ldl

그래서 -lm-ldlgcc선 당신은 컴파일하고 그냥 벌금을 가야한다.

또는 대부분의 경우 CFLAGS문제를 명시 적으로 정의 하고 완화 할 수도 있습니다 . 이것들은 두 가지 해결 방법입니다.

예:

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

답변

라이브러리가 할당되는 위치에 추가 -lm했습니다 CMakeLists.txt. 지금 작동하고 있습니다.


답변

비슷한 문제가있는이 스레드를 발견했습니다. 명시 적으로 해결책은 CMakeLists.txt 파일을 찾아 변경하는 것입니다.

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})