clion添加pthread的几种方法

3 篇文章 0 订阅
2 篇文章 0 订阅

在上一篇文章中,编写了一个简单的pthread的demo,但是在使用clion编译的时候,提示:


/home/allen/CLionProjects/multythreaddemo1/main.cpp:19: undefined reference to `pthread_create'
/home/allen/CLionProjects/multythreaddemo1/main.cpp:20: undefined reference to `pthread_create'
/home/allen/CLionProjects/multythreaddemo1/main.cpp:36: undefined reference to `pthread_join'
/home/allen/CLionProjects/multythreaddemo1/main.cpp:44: undefined reference to `pthread_join'

很明显,没有添加上pthread的库,虽然在头文件中include了他的库,但同时还需要在编译的时候指定。

首先使用gcc单独编译:

gcc  main.cpp -otest -pthread

 

正常编译,同时程序正常执行,证明确实是clion在编译的时候没有添加上。

由于clion使用的是cmake,简单查了一下cmake添加编译参数,google搜索clion | cmake add flags ,其中几个答案够用了:

1

set(GCC_COVERAGE_COMPILE_FLAGS "-Wall -Wextra -Wconversion")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )

SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS    "-lgcov")

There are several ways to add them:

  1. The easiest one (not clean, but easy and convenient, and works only for compile flags, C & C++ at once):

    add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
    
  2. Appending to corresponding CMake variables:

    SET(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
    SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
    
  3. Using target properties, cf. doc CMake compile flag target property and need to know the target name.

       

get_target_property(TEMP ${THE_TARGET} COMPILE_FLAGS)
if(TEMP STREQUAL "TEMP-NOTFOUND")
  SET(TEMP "") # Set to empty string
else()
  SET(TEMP "${TEMP} ") # A space to cleanly separate from existing content
endif()
# Append our values
SET(TEMP "${TEMP}${GCC_COVERAGE_COMPILE_FLAGS}" )
set_target_properties(${THE_TARGET} PROPERTIES COMPILE_FLAGS ${TEMP} )

在clion的CMakeLists.txt中,添加

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")

或者添加

find_package(Threads REQUIRED)
target_link_libraries(multythreaddemo1 Threads::Threads)

重新编译运行即可。

 

 

 

 

 

 

 

 

 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值