操作系统用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/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)