【Linux问题解决】操作系统用C语言多线程编程 对‘pthread_create’未定义的引用 报错解决办法

操作系统用C语言多线程编程 对‘pthread_create’未定义的引用 报错解决办法

今天写操作系统作业

在Ubuntu Linux系统中用C语言编写多线程程序

在命令行进行编译

没通过编译

报错如下:

In file included from 4.15.c:3:0:
/usr/include/pthread.h:234:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)()’
 extern int pthread_create (pthread_t *__restrict __newthread,
            ^~~~~~~~~~~~~~
/tmp/ccQlndMt.o:在函数‘main’中:
4.15.c:(.text+0x293):对‘pthread_create’未定义的引用
4.15.c:(.text+0x2b8):对‘pthread_create’未定义的引用
4.15.c:(.text+0x2fd):对‘pthread_create’未定义的引用
4.15.c:(.text+0x322):对‘pthread_create’未定义的引用
4.15.c:(.text+0x367):对‘pthread_create’未定义的引用
/tmp/ccQlndMt.o:4.15.c:(.text+0x38c): 跟着更多未定义的参考到 pthread_create
collect2: error: ld returned 1 exit status

意思就是说代码中的pthread_create()函数未定义

  • pthread_create()函数 是创建线程的函数。它的功能是创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。pthread_create的返回值 表示成功,返回0;表示出错,返回-1。

头文件:
#include<pthread.h>

函数声明:
int pthread_create(pthread_t *tidp,const pthread_attr_t attr,
(void
)(start_rtn)(void),void *arg);

可我已经加了#include<pthread.h>头文件了

怎么还说没有定义这个函数呢?

后来查资料才知道

因为pthread并非Linux系统的默认库,而是POSIX线程库。连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时,在编译中要加-lpthread参数。在Linux中将其作为一个库来使用,因此加上 -lpthread(或-pthread)以显式链接该库。

【注意】函数在执行错误时的错误信息将作为返回值返回,并不修改系统全局变量errno,当然也无法使用perror()打印错误信息。

所以,在Ubuntu Linux的命令行中应该在命令中加上-lpthread!!!

通过以下命令即可成功编译:

gcc [filename].c -lpthread -o [filename]

这样就不会报错说“对‘pthread_create’未定义的引用”了

在这里插入图片描述

相关技术文章:
【Linux问题解决】Ubuntu Linux 安装gcc4.9 g++4.9报错“没有可供安装的候选者”解决办法
【Linux教程】Ubuntu Linux 更换源教程
【Linux教程】如何实现在Ubuntu Linux和windows之间复制粘贴、拖拽复制文件?

【Java Web总结】Java Web项目中 的.classpath、.mymetadata、.project文件作用
【Java Web问题解决】Tomcat报错javax.servlet.ServletException: Error instantiating servlet class.报错404
【比较】什么是“服务器端跳转”“客户端跳转”,二者有什么区别?
【总结】表单提交的get和post有什么不同?
【总结】Java Web 中的4种属性范围(page、request、session、application)
【Java Web问题解决】Tomcat启动时控制台出现中文乱码的问题解决方法
【示例项目】java实现通过身份证号码判断籍贯所在地区
【总结】HTTP协议中的状态码(200、403、404、500等)
【Java Web问题解决】提交表单后显示乱码
【Java Web总结】JSP页面的生命周期详解
【Java Web总结】JSP页面实现类详解
【Java Web 问题解决】Tomcat启动失败 报错:Server Tomcat v9.0 Server at localhost failed to start.
【Java Web问题解决】连接数据库出错:java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/

  • 23
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值