본문 바로가기
Programming/Boost

boost: 'pthread_condattr_setclock' error

by 드로니뚜벅이 2022. 8. 23.

리눅스에서 boost를 사용하다 보면 아래와 같은 스레드 관련 오류가 나는 경우가 있습니다.

asio에서 serialization 예제를 컴파일시킨건데...

$ make    
Scanning dependencies of target server
[ 25%] Building CXX object CMakeFiles/server.dir/server.cpp.o
[ 50%] Linking CXX executable server
/usr/bin/ld: CMakeFiles/server.dir/server.cpp.o: undefined reference to symbol 'pthread_condattr_setclock@@GLIBC_2.3.3'
/usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/server.dir/build.make:86: server] 오류 1
make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/server.dir/all] 오류 2
make: *** [Makefile:84: all] 오류 2

boost에서 thread 관련 코드를 사용할 경우에는 CMakeLists.txt를 작성할 때 COMPONENTS를 사용하여 thread 라이브러리를 불러와야 컴파일 오류가 발생하지 않네요. 왜 그런지는 자료를 찾지 못했습니다.

cmake_minimum_required(VERSION 3.0)

project(asio_serialization)

find_package(Boost 1.71 REQUIRED COMPONENTS system thread serialization)
# find_package(Threads)
include_directories(${Boost_INCLUDE_DIR})
...

- boost의 스레드는 운영체제에 맞는 스레드 라이브러리를 불러옵니다.

- boost::thread는 자동으로 Threads::Threads를 불러옵니다.

 

참고사이트

 

'Programming > Boost' 카테고리의 다른 글

Boost.Asio 란?  (0) 2022.09.06
boost library 설치  (0) 2022.08.16