引言
看来很多答案,说的天花乱坠,实际上半点用处没有。真的忍不住想吐槽
直接说答案:
1.真的不存在,重装g++/gcc
2.cmake 提示问题,查看有无其他报错,没有就不用管,直接make。
一、测试是否存在
创建一个func.cpp
#include <pthread.h>
void* test_func(void* data)
{
return data;
}
int main(void)
{
pthread_t thread;
pthread_create(&thread, NULL, test_func, NULL);
pthread_detach(thread);
pthread_join(thread, NULL);
pthread_atfork(NULL, NULL, NULL);
pthread_exit(NULL);
return 0;
}
编译加执行
g++ -o fun func.cpp -lpthread
./fun
如果没有报错,那恭喜你,pthread 的动态库 没有问题。【直接看第三点】
二、有报错,重新安装
2.如果有报错,那更简单了,明显就是 动态库不存在,正常情况下没必要搞什么动态库软链接啥的,你只要没改动过都是正常的。
直接梭哈!重装就完事了
sudo apt-get autoremove g++
sudo apt-get autoremove c++
sudo apt-get install g++
sudo apt-get install c++
然后,查看动态库位置
ldconfig -p |grep pthread
#有查询结果就是对的,然后在执行一遍上面的测试
三、正常运行但是cmake 报错了
这是正常现象,cmake 期间找不到 pthread 的动态库是被允许的,只要你写的 CMakeLists.txt,有这句代码,那么make的时候就不会报错
set (CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -lpthread")
但是为啥make会提示不存在?这大概是因为其他的命令导致了报错
比如我cmake的时候,报了一个msyql 不存在的错误【红框一】,但是我没注意,只留意了 CMakeError.log 【红框二】
如图
但是,当我解决了mysql的问题之后,实际上cmake 已经通过了,已经生成了MakeFile文件,红框一报错如上所说,是被允许的
直接make,搞定