当前位置: 首页 > 编程日记 > 正文

gcc中-pthread和-lpthread的区别

用gcc编译使用了POSIX thread的程序时通常需要加额外的选项,以便使用thread-safe的库及头文件,一些老的书里说直接增加链接选项 -lpthread 就可以了,像这样:

Shell代码  收藏代码
  1. gcc -c x.c
  2. gcc x.o -ox -lpthread

而gcc手册里则指出应该在编译和链接时都增加 -pthread 选项,像这样:

Shell代码  收藏代码
  1. gcc -pthread -c x.c
  2. gcc x.o -ox -pthread

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

Shell代码  收藏代码
  1. $ gcc -v -c x.c
  2. ...
  3. /usr/lib/gcc/i486-linux-gnu/4.2.4/cc1 -quiet -v x.c -quiet -dumpbase x.c
  4. -mtune=generic -auxbase x -version -fstack-protector -fstack-protector -o /tmp/cch4ASTF.s
  5. ...
  6. as --traditional-format -V -Qy -o x.o /tmp/cch4ASTF.s
  7. ...
  8. $ gcc -v x.o -ox -lpthread
  9. ...
  10. /usr/lib/gcc/i486-linux-gnu/4.2.4/collect2 --eh-frame-hdr -m elf_i386 --hash-style=both
  11. -dynamic-linker /lib/ld-linux.so.2 -ox
  12. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o
  13. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crti.o
  14. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtbegin.o
  15. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib/../lib
  16. -L/usr/lib/gcc/i486-linux-gnu/4.2.4
  17. -L/usr/lib/gcc/i486-linux-gnu/4.2.4
  18. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib
  19. -L/lib/../lib
  20. -L/usr/lib/../lib
  21. -L/opt/intel/Compiler/11.1/046/lib/ia32
  22. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib
  23. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../..
  24. x.o -lpthread -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc
  25. --as-needed -lgcc_s --no-as-needed
  26. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtend.o /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crtn.o

下面是在编译和链接时分别指定 -pthread 选项的输出结果:

Shell代码  收藏代码
  1. $ gcc -v -pthread -c x.c
  2. ...
  3. /usr/lib/gcc/i486-linux-gnu/4.2.4/cc1 -quiet -v <strong>-D_REENTRANT</strong>
  4. x.c -quiet -dumpbase x.c
  5. -mtune=generic -auxbase x -version -fstack-protector -fstack-protector -o /tmp/cc205IQf.s
  6. ...
  7. as --traditional-format -V -Qy -o x.o /tmp/cc205IQf.s
  8. ...
  9. $ gcc -v x.o -ox -pthread
  10. /usr/lib/gcc/i486-linux-gnu/4.2.4/collect2 --eh-frame-hdr -m elf_i386 --hash-style=both
  11. -dynamic-linker /lib/ld-linux.so.2 -ox
  12. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o
  13. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crti.o
  14. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtbegin.o
  15. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib/../lib
  16. -L/usr/lib/gcc/i486-linux-gnu/4.2.4
  17. -L/usr/lib/gcc/i486-linux-gnu/4.2.4
  18. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib
  19. -L/lib/../lib
  20. -L/usr/lib/../lib
  21. -L/opt/intel/Compiler/11.1/046/lib/ia32
  22. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib
  23. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../..
  24. x.o -lgcc --as-needed -lgcc_s --no-as-needed <strong>-lpthread</strong>
  25. -lc -lgcc
  26. --as-needed -lgcc_s --no-as-needed
  27. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtend.o /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crtn.o

可见编译选项中指定 -pthread 会附加一个宏定义 -D_REENTRANT,该宏会导致 libc 头文件选择那些thread-safe的实现;链接选项中指定 -pthread 则同 -lpthread 一样,只表示链接 POSIX thread 库。由于 libc 用于适应 thread-safe 的宏定义可能变化,因此在编译和链接时都使用 -pthread 选项而不是传统的 -lpthread 能够保持向后兼容,并提高命令行的一致性。


相关文章:

Java项目:精品养老院管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统功能包括&#xff1a;通知公告&#xff0c;老人管理&#xff0c;护工管理&#xff0c;问答管理等等功能。 二、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&am…

install python+twisted+mysqldb+django on mac

一. install python 1) check install or not 在mac终端输入命令&#xff1a;which python 即可查看python的路径 2&#xff09;未安装时&#xff0c;手动下载安装包 地址&#xff1a;https://www.python.org/downloads/ 选择下载 Mac OS X 64-bit/32-bit installer 安装 二…

JVM优雅退出

在某个Java应用增加新功能,缩容机器,或者应用以及机器发生异常,通常会停止正在运行的应用,该应用通常正在运行着任务,如果停止应用的操作处理不当的话,很有可能会导致数据丢失,损坏,从而影响业务。所以在停止应用的时候,需要考虑如何安全优雅的退出。维护了所有已经注册的钩子,由于jvm本身没有提供好用的方法去移除已经注册的钩子,可以通过反射的方式调用。对于强制关闭的几种情况,会直接停止JVM进程,JVM不会调用已注册的。对于正常关闭、异常关闭的几种情况,JVM关闭前,都会调用已注册的。

网络名词--“环路”

环路一直是网络工程师以及网络运维人员头疼的事&#xff0c;如何防止环路的产生&#xff0c;如何快速找出环路的原因排除故障&#xff0c;是每一个网络从业人员必备的技能。这就要求我们对环路产生的原因了如指掌&#xff0c;本文主要对交换环路进行分析&#xff0c;从分类、形…

希腊字母表及读音

序号大写小写国际音标中文读音意义1Ααa:lf阿尔法角度;系数2Ββbet贝塔磁通系数;角度;系数3Γγga:m伽马电导系数(小写)4Δδdelt德尔塔变动;密度;屈光度5Εεep`silon伊普西龙对数之基数6Ζζzat截塔系数;方位角;阻抗;相对粘度;原子序数7Ηηeit艾塔磁滞系数;效率(小写)8Θθθit西塔温度;相位角9Ιιaiot约塔

loadrunner——win7+LR11配置

一、 安装vmware虚拟机 下载安装vmware15后&#xff0c;可使用密钥为&#xff1a;CG392-4PX5J-H816Z-HYZNG-PQRG2 二、 安装win7系统 2.1下载win7镜像文件 2.2 vmware中创建win7虚拟机 创建过程省略&#xff0c;一键式创建即可&#xff0c;windows产品可使用密钥如下&#xff1…

C++标准库中sstream和strstream的区别

在C有两种字符串流&#xff0c;一种在sstream中定义&#xff0c; 另一种在strstream中定义。 它们实现的东西基本一样。 strstream里包含 class strstreambuf; class istrstream; class ostrstream; class strstream; 它们是基于C类型字符串char*编写的 sstream中包含 class is…

基于jQuery垂直多级导航菜单代码

基于jQuery垂直多级导航菜单代码是一款黑色风格的jQuery竖直导航菜单特效下载。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <ul class"ce"><li> <a class"xz" href"#">目录A</a>…

Java项目:在线考试系统(java+springBoot+vue+Mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 管理员和教师登陆此账号就进入后台&#xff0c;学生登陆此账号就进入前端做题。 老师发布了考试,学生才可以在主页面看到相应的考试信息。 有考试安排表以后,才能给该次考试添加题目,对应数据表是exammanag…

来玩Play框架05 数据库

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 数据库是整个站点的数据储藏室。用户提交的数据可以存储在数据库中&#xff0c;以便未来使用。Play可以通过JDBC和数据库通信。我讲介绍Play和my…

mysql数据库之linux版本

http://repo.mysql.com/yum/mysql-5.6-community/ 安装 安装方式一(在线安装) # 查看和mysql…

LINUX UMASK详解

一 权限掩码umask umask是chmod配套的&#xff0c;总共为4位&#xff08;gid/uid,属主&#xff0c;组权&#xff0c;其它用户的权限&#xff09;,不过通常用到的是后3个&#xff0c;例如你用chmod 755 file&#xff08;此时这文件的权限是属主读(4)写(2)&#xff0b;执行(1),同…

ubuntu14.04安装hadoop2.6.0(伪分布模式)

版本&#xff1a;虚拟机下安装的ubuntu14.04&#xff08;64位&#xff09;,hadoop-2.6.0 下面是hadoop2.6.0的官方英文教程&#xff1a; http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation hadoop下载…

Java项目:生活旅行分享平台(java+Springboot+JPA+Jsp+Html+js+Ajax+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; Springboot SpringMVC JPA Jsp Htm…

Servlet和SpringMVC补课

1.web.xml加载顺序 http://mianhuaman.iteye.com/blog/1105522 关键点&#xff1a;ServletContext -> context-param -> listener -> filter -> servlet 2.beans xmlns http://www.w3school.com.cn/xml/xml_namespaces.asp 用于避免元素命名冲突。在Spring中应用极…

gdb debug

1. dir 添加源代码查找路径 一般工程的代码会有多路径&#xff0c;gdb会在当前目录下搜索符号对应的代码。利用dir <path> 可以添加代码搜索路径&#xff1b; 例如工程目录&#xff1a; ./ ./dir_1/ ./dir_2/ 可以用如下命令添加代码搜索路径&#xff1a; dir dir…

Java项目:嘟嘟图片展览馆管理系统(java+Springboot+SpringMVC+JPA+Jsp+maven+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; Springboot SpringMVC JPA Jsp Htm…

javascript编译与运行机理(1)--

随着学习js的深入就越想了解其内部的运行机理&#xff0c;看了很多文章&#xff0c;感觉下面总结的不错。但囿于个人水平&#xff0c;只是达到了理解层面&#xff0c;还不能提出自己的见解&#xff0c;只好把资料罗列出来&#xff0c;留待以后总结&#xff1a; 1、Javascript的…

Citrix Synergy 2014 重要信息快速一览

今天的互联网、社交媒体的确强大&#xff0c;我们可以足不出户了解到9600公里&#xff08;北京到LA的距离&#xff09;之外的美国发生的事情。今天从Brain Madden大神那儿又扒到了一些经过提炼的关于Citrix Synergy 2014&#xff08;Citrix每年一度的大会&#xff09;的会议内容…

stm32 flash和sram

FLASH是用来存储程序的&#xff0c;SRAM是用来存储程序运行中的中间变量转载于:https://www.cnblogs.com/CodeWorkerLiMing/p/10984065.html

常见主机字节序

常见主机字节序1&#xff0e; Little endian&#xff1a;将低序字节存储在起始地址2&#xff0e; Big endian&#xff1a;将高序字节存储在起始地址LE little-endian最符合人的 思维的字节序地址低位存储值的低位地址高位存储值的高位怎么讲是最符合人的思维的字节序&#xff0…

Java项目:仿小米电子产品售卖商城系统(java+SpringBoot+Vue+MySQL+Redis+ElementUI)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的仿小米电子产品售卖商城系统。首先&#xff0c;这是一个前后端分离的项目&#xff0c;代码简洁规范&#xff0c;注释说明详细。其次&#xff0c;这…

在js中使用createElement创建HTML对象和元素

1.创建链接 <script language"javascript"> var o document.body; //创建链接 function createA(url,text) { var a document.createElement("a"); a.href url; a.innerHTML text; a.style.color "red"; o.appendChild(a); …

Leetcode | 3Sum

Given an array S of n integers, are there elements a, b, c in S such that a b c 0? Find all unique triplets in the array which gives the sum of zero. Note:Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)The solution set …

玩转 JavaScript 面试:何为函数式编程?

函数式编程在 JavaScript 领域着实已经成为一个热门话题。就在几年前&#xff0c;很多 JavaScript 程序员甚至都不知道啥是函数式编程&#xff0c;但是就在近三年里我看到过的每一个大型应用的代码库中都包含了函数式编程思想的大规模使用。 函数式编程(缩写为 FP)是一种通过组…

正则表达式分类 区别

原文地址&#xff1a;http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html 正则表达式&#xff1a;在计算机科学中&#xff0c;是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里&#xff0c;正则表达式通常被用…

Java项目:嘟嘟校园一卡通系统(java+JSP+Servlet+html+css+JavaScript+JQuery+Ajax+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a;卡管理&#xff0c;卡消费&#xff0c;卡充值&#xff0c;图书借阅&#xff0c;消费&#xff0c;记录&#xff0c;注销等等功能。 二、项目运行 环境配置&#xff1a; Jdk…

OC与C语言的区别

C语言是面向过程的编程语言&#xff0c;而OC则是面向对象的编程语言。面向对象:打个比方,就是你做一次菜,让老婆做个菜,吃饭,这就是面向对象,效率高面向过程,就是每一个细节:比如你要先把或开到合适的位置.然后还要洗菜 ,等油热了,才能开始炒菜,然后调料,...,起锅,到碗里,吃饭.…

Hutool之集合工具——CollectionUtil

为什么80%的码农都做不了架构师&#xff1f;>>> 集合工具 CollectionUtil 这个工具主要增加了对数组、集合类的操作。 1. join 方法 将集合转换为字符串&#xff0c;这个方法还是挺常用&#xff0c;是StrUtil.split的反方法。这个方法的参数支持各种类型对象的集合…

15:解决IntelliJ IDEA的乱码问题

1. -Dfile-encodingsUTF-8 &#xff0c;全局&#xff1a; 转载于:https://www.cnblogs.com/gzhbk/p/10991335.html