'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 버전은 무엇입니까?
nixeagle

ldd --version주었다 (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat

Makefile을 포함하십시오. 이것은 분명히 라이브러리 종속성이 깨진 것입니다 (및 가능한 glib 버전 불일치).
nixeagle

2
추가를 시도 -lm했습니까? 어디에 추가 했습니까?
muru

@ Shashwat : 정확히 어디에 추가 했습니까? 코드를 게시 해 주시겠습니까? 감사합니다

답변:


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

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


4
추가 내용을 자세히 보여줄 수 있습니까? 감사합니다
Lucio

3

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

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.