最近开始使用Clion编辑器,踩了不少坑
关键字:
Cmake版本导致的undefined reference to ‘pthread_join’
详细问题描述:
起初,项目clone下来的目录就是这样的:
即CmakeLists.txt和makefile在同一级目录里面。按照原作者的思路,我们应该先在本级目录下make,然后再运行TKeed文件(其实就是linking后的src_code可执行文件别名)。
在terminal中,这样固然是不会遇到问题的。但我想在Clion编辑器中方便的调试,于是乎,按项目规定的配置来设定了以下setting选项:
注意这边的CMake,为之后的坑埋下了伏笔。
配置完成后,Clion提示我选中一个CmakeList.txt文件,选中之后,发现并不能运行。报错
undefined reference to ‘pthread_join’ & ‘pthread_create’。这个报错字面意思是找不到pthead.h里面的两个库函数。
一开始在中文社区搜,搜到质量最高的回答是这个:
https://zhuanlan.zhihu.com/p/81681440
这篇文章简述了遇到这种情况的排查方法,但主要集中在CmakeList.txt是否有没有包括进响应的.h文件,以及c++的内核优化起名问题。然而这个项目是一个纯C的项目,而且这是个库函数报错。
上面说到,Clion默认使用的是Cmake来做编译的过程。因此遵循Cmake -->生成MakeFile -->在MakeFile同级路径下make -->生成.o文件可执行文件的过程,即compile和linking两个主要过程。
排查:
第一步,先检查文件夹中是否有全部的目标.o文