其他教程: cmake 从入门到入土
错误
在多线程编译时,如果没有引入pthread,可能会报下列错误,比如:
undefined reference to `pthread_create’
或者
terminate called after throwing an instance of ‘std::system_error’
terminate called recursively
what(): Unknown error -1
Aborted (core dumped)
解决
方法一
PROJECT(HELLO)
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11")
AUX_SOURCE_DIRECTORY(. SRC_LIST)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})
从cmake的CMakeLists.txt文件中可以看出cmake是像g++使用c++11特性一样,都有-std=c++11,所以像一样加个-pthread解决就行。
PROJECT(HELLO)
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 -pthread")
AUX_SOURCE_DIRECTORY(. SRC_LIST)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})
方法二
使用包Threads和链接${CMAKE_THREAD_LIBS_INIT}
PROJECT(HELLO)
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11")
FIND_PACKAGE(Threads)
AUX_SOURCE_DIRECTORY(. SRC_LIST)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT})
在命令行中指定:
在链接时,加上 -pthread选项。g++ -std=c++11 -pthread thread_demo.cpp -o demo。
g++ -std=c++11 -pthread thread_demo.cpp -o demo。