gcc:-pthread和-lpthread的区别

在Linux环境下,使用GCC编译多线程程序时,-pthread和-lpthread选项有不同作用。-pthread在编译阶段会添加-D_REENTRANT宏,确保线程安全的库被选用,而在链接阶段与-lpthread相同,链接POSIX线程库。为保持向后兼容和命令行一致性,推荐使用-gcc -pthread进行编译和链接。
摘要由CSDN通过智能技术生成

最近在使用linux mint15,里面自带的gcc时4.7的,当我编译多线程程序时,使用-lpthread居然说没有找到线程库函数!!!然后man了一下,才发现在gcc 4.7中链接线程库使用-pthread,而不是用-lpthread,为了搞清楚他们之间的区别,我进行了以下测试(测试方法我查找了好多网上的资料):
用gcc编译使用了POSIX thread的程序时通常需要加额外的选项,以便使用thread-safe的库及头文件,一些老的书里说直接增加链接选项 -lpthread 就可以了,像这样:

Shell代码   
gcc -c x.c  
gcc x.o -ox -lpthread  
 而gcc手册里则指出应该在编译和链接时都增加 -pthread 选项,像这样:

Shell代码   
gcc -pthread -c x.c  
gcc x.o -ox -pthread  
 那么 -pthread 相比于 -lpthread 链接选项究竟多做了什么工作呢?我们可以在verbose模式下执行一下对应的gcc命令行看出来。下面是老式的直接加 -lpthread 链接选项的输出结果:

Shell代码   

$ gcc -v -c x.c  
...  
/usr/lib/gcc/i486-linux-gnu/4.2.4/cc1 -quiet -v x.c -quiet -dumpbase x.c  
-mtune=generic -auxbase x -version -fstack-protector -fstack-protector -o /tmp/cch4ASTF.s  
...  
as --traditional-format -V -Qy -o x.o /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值