【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

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

可我已经加了#include头文件了

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

后来查资料才知道

因为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问题解决】操作系统用C语言多线程编程 对‘pthread_create’未定义的引用 报错解决办法_第1张图片

相关技术文章:
【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/

你可能感兴趣的:(Linux)