真正的答案,cmake 时,/usr/bin/ld: cannot find -lpthreads问题

引言

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

直接说答案:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值