2017-10-03 2 views
0

외부 라이브러리 사용을 테스트하는 간단한 프로그램을 작성하려고하지만 g ++과 연결하는 데 문제가 있습니다. 명령/결과보기 :외부 라이브러리에 연결하는 g ++이 정의되지 않은 참조를 만듭니다.

[email protected]:~/Desktop/WDT_DIO/linux/test$ g++ -o main main.o -lwdt_dio 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_unlink' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_mutexattr_settype' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_close' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_lock' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_unlock' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_create' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_init' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_mutexattr_init' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_spin_destroy' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_post' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_open' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_getvalue' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `sem_wait' 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/libwdt_dio.so: undefined reference to `pthread_join' 
collect2: error: ld returned 1 exit status 

OS의 일부 기본 라이브러리에 연결되어 있지 않은 것 같습니다.

상세 사항 :

gcc --version --> 5.4.0 20160609 
ldd --version --> 2.23 
OS   --> Ubuntu 16.04 x64, 4.8.0-36-generic kernel 
+0

[pthread를 C++로 사용] (https://stackoverflow.com/q/2679885/608639) 및 [pthread를 사용하여 컴파일/링크 오류] (https://stackoverflow.com/q/6332410/)를 복제 한 것 같습니다. 608639) – jww

답변

2

당신은 pthread 라이브러리에 대한 링크를 누락 될 것으로 보인다. 당신의 컴파일 명령에 -pthread을 추가

g++ -o main main.o -pthread -lwdt_dio 

sem_wait(3) 쇼 매뉴얼 페이지를 확인 : -pthread와

링크.

참고 : sem_wait 무작위로 선정되었다, 그들 모두는 당신이 오류를 읽으면

+0

당신이나 Petar의 의견을 받아 들일 수는 없지만 당신이 옳았습니다. 어떻게 도서관에서 누락 된 도서관이 있었는지 아십니까? pthread는 분명했지만 세마포어 함수가 동일한 라이브러리 – DrTarr

+0

@ NateGreco의 일부 였음을 즉시 인식하지 못했습니다.이 메서드에 익숙하지만, 경우에 따라서는 직접적인 설명도 추가했습니다 ... –

+0

Perfect, thakns – DrTarr

1

밀접는 정의되지 않은이 libwdt_dio.so에서 오는 것을 말한다 지정해야합니다. 또한 정의되지 않은 참조가있는 함수를 말합니다.

이 특별한 경우에는 pthread 라이브러리입니다. 아마도 WDT lib 문서에 종속성으로 언급되어야합니다.

명령 줄을 통해 컴파일하는 경우 g ++ 명령에 -pthread을 추가 할 수 있습니다.

관련 문제