编译Linux程序出现“对‘pthread_create’未定义的引用”

在尝试编译包含POSIX线程的Linux程序时遇到'pthread_create'未定义的引用问题。常见解决方案是在gcc命令行中添加-lpthread选项,但此案例中该方法无效。错误在于-lpthread选项应在所有源代码文件之后。进一步探究发现,-pthread不仅链接线程库,还会在编译时添加-D_REENTRANT宏,确保线程安全。为保持向后兼容性和命令行一致性,建议在编译和链接时都使用-pthread选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在学习Linux程序设计POXIS线程的时候,编译一个段简单的代码,就出现下面的错误:

1 /tmp/cc2FQJTh.o:在函数‘main’中:
2 1-thread.c:(.text+0x29):对‘pthread_create’未定义的引用
3 1-thread.c:(.text+0x67):对‘pthread_join’未定义的引用
4 collect2: 错误: ld 返回 1

  可是在我的代码中已经包含了pthread.h,这是什么回事呢,百度一下,发现网上大部分的解决办法是在gcc编译命令加上选项:lpthread。

1 gcc -o pthread -lpthread pthread.c

  但我照着网上的方法试试,发现还是不行,错误提示与原来相同。后来才发现是我自己错了,我是在目标代码文件前加上-lpthread。但实际的做法应该是在代码文件后面添加次选项。

1 finlay@finlay-Lenovo-G470:~/文档/程序设计/Linux程序设计/12章$ gcc 1-thread.c -lpthread
2 #成功!
3 finlay@finlay-Lenovo-G470:~/文档/程序设计/Linux程序设计/12章$ gcc -lpthread -Wall 1-thread.c
4 #失败!
5 /tmp/ccE6dosW.o:在函数‘main’中:
6 1-thread.c:(.text+0x29):对‘pthread_create’未定义的引用
7 1-thread.c:(.text+0x67):对‘pthread_join’未定义的引用
8 collect2: 错误: ld 返回 1

  但是还有一个什么有趣的现象,如下:

1 finlay@finlay-Lenovo-G470:~/文档/程序设计/Linux程序设
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值