C/C++ linux 多线程编程报错 :undefined reference to `pthread_create‘
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
·
最近在做 linux 环境下编程时发现,在使用 C++ 11 中的线程类std::thread时,出现了下面的错误,这里做个笔记记录下。
demo 代码:
#include<iostream>
#include<thread>
using namespace std;
void func(){
cout<<"llalal"<<endl;
}
int main(void){
thread mthd(func);
mthd.join();
return 0;
}
编译脚本:
g++ main.cpp -o main
编译错误 :
/usr/bin/ld: /tmp/ccNLJ5jG.o: in function `std::thread::thread<void (&)(), , void>(void (&)())':
/usr/include/c++/9/thread:126: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
问题分析: pthread不是linux下的默认的库,也就是在链接的时候,无法找到phread库中join函数的入口地址,于是链接会失败。
解决方案: 编译命令后,附加 -lpthread 参数。(-l是L是小写 不是i的大写I)
修改后(正确)的编译脚本:
g++ -std=c++11 main.cpp -o mainn -lpthread
编译后执行:
linzhuofan@ubuntu:~/Desktop/duoxianchen$ ./mainn
llalal
但是,其实,C++11引入的thread库已经对linux下的pthread库进行了封装,在linxu下只需要这么写CMakeLists.txt即可把所有的多线程代码都跑起来!!!
CMakeLists.txt:
cmake_minimum_required(VERSION 3.1.0)
project(ProjectName)#ProjectName 需要你自己取项目名字!
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall ")
set(CMAKE_BUILD_TYPE Debug)
include_directories(${CMAKE_SOURCE_DIR}/include)
file(GLOB SRC_FILES #注意这里定义都shell 变量 SRC_FILES 一定要对应在add_executable中!
"${PROJECT_SOURCE_DIR}/src/*.cpp"
)
#查找依赖库
find_package(Threads REQUIRED)
add_executable(${CMAKE_PROJECT_NAME} main.cpp ${SRC_FILES})
#引入依赖库
target_link_libraries(${CMAKE_PROJECT_NAME} Threads::Threads)
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e
added ecosystem file for PM2 5 年前
5def40a3
Add host customization support for the NodeJS version 5 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)