引言

看来很多答案,说的天花乱坠,实际上半点用处没有。真的忍不住想吐槽

直接说答案:

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,搞定
在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐