最近在linux上使用Clion这个C++ IDE,感觉很好,JetBrain的产品都很不错。
但是在跑简单例子的时候,使用到thread对象,直接build会出错
报错是:
thread::thread<void (&)(int), int>(void (&)(int), int&&)’:pthread_create’未定义的引用
就是说头文件的函数原型已经找到了,但是函数实现还没有找到,需要动态链接到pthread库上,然后就试着去run里面的edit_configure里面的cmdline parameter中手动添加-pthread参数
但是仍然无效,就很纳闷是什么原因。
后来发现在project目录下有个CmakeList文件,原来使用的是CMake编译器,所以应该在CMakeList文件中来指定命令行参数
比如:
cmake_minimum_required(VERSION 3.3) project(C__NewFeature) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") set(SOURCE_FILES main.cpp) add_executable(C__NewFeature ${SOURCE_FILES})
然后重新build就成功了。
一般编译命令指定动态库时,程序会在系统默认的动态库路径去寻找,如果动态库不在指定路径上,需要手动指定路径
通常是 -L /usr/local/lib -pthread这样先指定路径,后指定库
但是在CMakeList中可以将二者分开,路径在link_directories("/usr/local/lib")中指定好
在编译命令参数中直接使用相应的库即可,比如:
cmake_minimum_required(VERSION 3.3) project(BoostTest) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lboost_coroutine -lboost_context -lboost_regex") set(SOURCE_FILES main.cpp) add_executable(BoostTest ${SOURCE_FILES}) link_directories("/usr/local/lib")