在Linux(内核2.6.5)上,我们的构建系统使用-D_REENTRANT调用gcc.

使用pthreads时仍然需要这个吗?

它与gcc -pthread选项有什么关系?我知道我应该使用-pthread和pthreads,我还需要-D_REENTRANT吗?

另外,在gcc 3.3.3和gcc 4.x.x之间使用REENTRANT之间是否存在任何差异?

当我使用-pthread gcc选项时,我可以看到_REENTRANT被定义了.从命令行省略-D_REENTRANT会有什么不同,例如,某些对象可以在没有多线程支持的情况下编译,然后链接到使用pthreads的二进制文件并导致问题吗?

我认为应该可以使用:g -pthread

> echo | g++ -E -dM -c - > singlethreaded

> echo | g++ -pthread -E -dM -c - > multithreaded

> diff singlethreaded multithreaded

39a40

> #define _REENTRANT 1

我们正在编译多个静态库和与静态库链接的应用程序,库和应用程序都使用pthread.

我相信它在过去的某个阶段是必需的,但想知道它是否仍然需要.谷歌搜索没有返回任何最近提到-D_REENTRANT与pthreads的信息.你能指点我讨论在最近版本的kernel / gcc / pthread中使用的链接或引用吗?

澄清:目前我们正在使用-D_REENTRANT和-lpthread,我假设我可以用g -pthread替换它们,看看man gcc它为预处理器和链接器设置了标志.有什么想法吗?

解决方法:

对我来说,最好的答案是来自pts的评论,如果只是他打扰提交它作为答案:

You investigated properly and answered

your own question. Use g++ -pthread,

it is equivalent to g++ -lpthread -D_REENTRANT.

Using g++ -D_REENTRANT would be different,

it may not set all the linker flags. –

pts May 18 at 0:30

标签:linux,gcc,pthreads

来源: https://codeday.me/bug/20190925/1817416.html

Linux如何定义宏 REENTRANT,linux – 我需要-D_REENTRANT和-pthreads吗?相关推荐

  1. linux 可定义信号数,Linux系统编程(20)——信号基本概念

    信号及信号来源 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知 ...

  2. linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件

    1.字符设备 字符设备.字符设备驱动与用户空间访问该设备的程序三者之间的关系 Linux内核中: a -- 使用cdev结构体来描述字符设备; b -- 通过其成员dev_t来定义设备号(分为主.次设 ...

  3. linux c 定义结构体,Linux查看C结构体定义

    今天写程序时,用到了pthread_cond_timedwait 函数,其原型为:int pthread_cond_timedwait(pthread_cond_t  *restrict cond , ...

  4. linux下定义删除变量

    linux下定义删除变量 linux中定义变量的方式为: 变量名=变量值(注意两边没有空格) a=123                //定义一个变量a,值为123 要使用变量的时候,要在变量前面加 ...

  5. Linux内核代码宏定义,Linux Kernel源代码中与段有关的重要宏定义

    __init, __initdata等属性标志,是要把这种属性的代码放入目标文件的.init.text节,数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链 ...

  6. 【GCC系列】深入理解Linux内核 -- __no_sanitize_address宏定义

    本文使用的Linux源码内核版本:Linux 5.10.0 __no_sanitize_address宏定义: 在Linux的内核源码里,尤其是一些关键的内核函数,会包含__no_sanitize_a ...

  7. linux make 命令行 定义宏(-D)传递给C源代码 简介

    需求: 通常使用 -dname=值 从"make命令行"传递给"makefile". 该定义可在makefile中访问. 想使用 编译器选项 将宏定义从&quo ...

  8. Linux下CMake简明教程(10) 定义宏来控制打印的信息

    代码在git 假设我们有个main.c,其内容如下 #include <stdio.h>int main(void) {#ifdef WWW1printf("hello worl ...

  9. 转载 linux内核 asmlinkage宏

    转载http://blog.chinaunix.net/uid-7390305-id-2057287.html 看一下/usr/include/asm/linkage.h里面的定义: #define ...

最新文章

  1. Python-ORM实战
  2. highcharts总结
  3. Oracle存储过程--案例
  4. c++ 前缀 变量命名_前缀命名
  5. No-3.Linux 终端命令格式
  6. 行为设计模式 - 模板方法设计模式
  7. 7个前端新手常见误区,千万要避开!
  8. 单片机c语言期末考试题(a)的答案,单片机C语言期末考试题(A).doc
  9. 搭建自己的企业QQ [2007年6月15日]
  10. HSImageSidebarView
  11. 使用mysql服务来记录用户的反馈
  12. 13.地区设置(Locale Settings)
  13. Excel常用技巧大全
  14. iPhone防止系统自动下载更新
  15. 人工智能名片到底有什么神奇之处?
  16. 【云原生之Docker实战】使用Docker部署ShowDoc文档工具
  17. java正态分布随机数_正态分布的随机数
  18. 为何基于树的模型在表格型数据中能优于深度学习?
  19. SQL Server 2016 AlwaysOn搭建
  20. 什么是uni-app?

热门文章

  1. 高速磁浮列车是怎么浮起来的
  2. 决策过程并举例_商品管理如何分析售罄率及应用决策中,降低库存
  3. win2003、win2008升级为win2012保留数据重装恢复数据说明
  4. java 单例模式 ---饿汉式懒汉式
  5. itoa函数的使用与说明
  6. Re-ID数据集介绍
  7. 定时器 setTimeout与setInterval的用法
  8. Windows 10 安装 NVIDIA cuDNN v7.6.0 for CUDA 10.1
  9. 移动视频面临生死劫,资本会唱挽歌还是赞歌?
  10. GOOGLE中秋节的图标比较好看