비슷한 질문이 여기에 있지만 답변되지 않았습니다.
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
많은 사이트에서 제공된 솔루션은 일부 플래그를 추가하는 것입니다 (예 : here 및 here ). 그러나 그들 중 누구도 나를 위해 일하지 않았습니다.
다음 은 Makefile입니다. 여기는 CMakeLists.txt이고 여기는 CMakeCache.txt입니다.
답변
솔루션을 찾은 사용자가 나중에 솔루션을 공유하지 않은 것처럼 보입니다. 솔루션을 찾으려고하는 사람들에게는 수학 라이브러리를 명시 적으로 추가하고 추가하십시오.-ldl
그래서 -lm
및 -ldl
에 gcc
선 당신은 컴파일하고 그냥 벌금을 가야한다.
또는 대부분의 경우 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})