关于__GNU_SOURCE 这个宏---如何开启【转】

关于__GNU_SOURCE 这个宏

转自:http://blog.csdn.net/stevenliyong/article/details/4160181

版权声明:本文为博主原创文章,未经博主允许不得转载。

今天发现一个奇怪的问题,即使
#include sys/stat.h
在使用  lstat 函数的时候还是会报
warning: implicit declaration of function 'lstat'

另外同样的问题,即使include 了 sys/time.h
还是会报
warning: implicit declaration of function 'nanosleep'

同样,即使include 了 sys/time.h  time.h
warning: implicit declaration of function 'clock_gettime'
error: 'CLOCK_MONOTONIC' undeclared (first use in this function)

最后发现 sys/time.h sys/stat.h time.h 都include 一个共同的头文件 features.h
原来这是用来让用户配置编译环境的头文件。再看一下_GUN_SOURCE这个宏,这个宏可以让用户打开所有feature.

/* If _GNU_SOURCE was defined by the user, turn on all the other features.  */
#ifdef _GNU_SOURCE
# undef  _ISOC99_SOURCE
# define _ISOC99_SOURCE 1
# undef  _POSIX_SOURCE
# define _POSIX_SOURCE 1
# undef  _POSIX_C_SOURCE
# define _POSIX_C_SOURCE 200112L
# undef  _XOPEN_SOURCE
# define _XOPEN_SOURCE 600
# undef  _XOPEN_SOURCE_EXTENDED
# define _XOPEN_SOURCE_EXTENDED 1
# undef  _LARGEFILE64_SOURCE
# define _LARGEFILE64_SOURCE 1
# undef  _BSD_SOURCE
# define _BSD_SOURCE 1
# undef  _SVID_SOURCE
# define _SVID_SOURCE 1
# undef  _ATFILE_SOURCE
# define _ATFILE_SOURCE 1
#endif
   
因此解决问题的办法很简单
只要在source file的开头 加上
#define _GNU_SOURCE
就可以了。

另外必须注意include 的先后次序
#include time.h
#include sys/time.h
顺序搞反了的话 clock_gettime CLOCK_MONOTONIC 是编译无法通过的。这是因为time.h是标准头文件
,而sys/time.h 是你当前系统的头文件。

 

 

如何开启_GNU_SOURCE宏

转自:http://blog.csdn.net/satanwxd/article/details/6234577

版权声明:本文为博主原创文章,未经博主允许不得转载。

在编写网络程序时,会涉及到一些关于BSD系统保留下的结构体和宏定义,关于一切配置在linux系统的/usr/include/features.h文件中,开启项如下:

#ifdef _GNU_SOURCE
# undef  _ISOC99_SOURCE
# define _ISOC99_SOURCE 1
# undef  _POSIX_SOURCE
# define _POSIX_SOURCE  1
# undef  _POSIX_C_SOURCE
# define _POSIX_C_SOURCE        199506L
# undef  _XOPEN_SOURCE
# define _XOPEN_SOURCE  600
# undef  _XOPEN_SOURCE_EXTENDED
# define _XOPEN_SOURCE_EXTENDED 1
# undef  _LARGEFILE64_SOURCE
# define _LARGEFILE64_SOURCE    1
# undef  _BSD_SOURCE
# define _BSD_SOURCE    1
# undef  _SVID_SOURCE
# define _SVID_SOURCE   1
#endif
可以看出只要开启了_GNU_SOURCE的花,大部分的BSD功能可以打开,看看_GNU_SOURCE是否开启有一个测试程序:

#include <iostream>

int main()
{
#ifdef _GNU_SOURCE
  std::cout << "gnu/n";
#else
  std::cout << "non-gnu/n";
#endif
}
只要gcc -D _GNU_SOURCE test.c -o test.o编译生成的text.o文件,运行一下就知道是否开启了

时间: 2024-09-30 01:35:05

关于__GNU_SOURCE 这个宏---如何开启【转】的相关文章

实现u-boot对yaffs/yaffs2文件系统下载的支持

以下红色部分就是需要修改的地方,老版本的U-boot需要添加下面的代码才能够增加对yaffs2的支持,新版本的只需添加一个宏就可以增加对yaffs2的支持. yaffs2文件系统的移植主要涉及到u-boot对yaffs2文件系统的烧写支持.linux内核对yaffs2文件系统的支持,以及yaffs2文件系统的制作,现在我们按照从下到上的顺序来实现各部分的功能. 1.实现u-boot对yaffs/yaffs2文件系统下载的支持. 注意:这里对Nand的操作是基于MTD架构方式. 通常一个Nnad

CentOS 6.6 x86_64 RPM包制作教程

一.RPM包介绍 对RPM包有五种基本的操作功能:安装.卸载.升级.查询和验证.linux软件包分为两大类:    1. 二进制类包:包括rpm安装包(一般分为i386和x86_64这几种)     2. 源码类包:源码包和开发包(.src.rpm)都是属于此类 有时候为了方便源码包的安装,和我们自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,当有源码包就可以直接编译得到二进制安装和其他任意包,另外,我们也可以使用rpm包来打包一些文件或者自己开发的一套软件,使用rpm有数

Excel2016怎么开启宏?

  Excel2016怎么开启宏?            1.打开Excel2016,点击左上角的文件,之后点击"选项".如下图 2.在弹出的"Excel选项"中在左侧选择"加载项" 3.然后在右侧管理中选择"Excel加载项",选择完成之后点击"转到"按钮 4.这是会弹出加载项对话框,把对话框中"分析工具库"勾选,勾选完成点击"确定"完成本次操作.如下图 5.此时在

宏基电脑怎么开启硬件虚拟化,虚拟机用不了啊

问题描述 我的笔记本可以安装虚拟机,但是安装系统是出问题.换过很多虚拟机和系统,都不行.新建虚拟机回报没有开启虚拟化.然后就查一下支不支持,支持啊.然后去BIOS里面找,怎么找都没有.回来一看:说宏基的不用开就行. 我的笔记本是宏基4250,CPU是amd E450.请问有没有人知道怎么搞掉. 解决方案 这里有一些解释,你看看对你有没有帮助http://wenku.baidu.com/view/56be5c040740be1e650e9ac0.html

李彦宏:百度与Uber开启中美互联网合作新模式

12月17日,百度与硅谷新兴创业公司Uber在北京签署战略合作及投资协议,Uber宣布接受百度的战略投资,双方达成全球范围内的战略合作伙伴关系.协议签订后,百度和Uber将在技术创新.开拓国际化市场.拓展中国O2O服务三个方面展开合作.百度董事长兼首席执行官李彦宏在签约仪式上表示,百度和Uber的这次合作有着深远的里程碑意义.此前中美两国互联网公司的合作大多是投资层面的,比较早是美国公司投资中国公司,后来也有一些中国公司到美国去投资美国公司.但中美互联网公司之间进行深层次战略意义上的合作,百度和

Mac Safari VS Mobile Safari开启的宏

宏 Mac OS X 10.7 Safari  Mobile Safari iOS6.1模拟器版 Mobile Safari开了Mac Safari没开的 声明位置                                                                                                                                                                        

黄宏生提前出狱回归创维可能性小后黄宏生时代开启

每经记者 徐洁云 发自上海 在创维4月举行的新品发布会上,曾有高管称,今年底黄宏生有望以保释方式提前出狱,而事实竟然来得比预计的还要快. 昨天,创维数码证实,其创始人.前主席黄宏生此前已获保释提前出狱.虽然黄宏生仍为创维数码第一大股东,但分析人士认为,他重返公司的可能性很小. 创维数码董事局主席兼CEO张学斌亦表示,出狱只是黄宏生个人事务,不会影响当前管理层,公司也未对其是否重返进行研究. 受此消息刺激,昨天创维数码以1.720港元开盘后一路走高,最高价达2.060港元,报收于1.930港元,大

宏碁转型自救项目开启:推自建云

摘要: 宏碁转型自救的策略是什么?创始人施振荣给出的答案是宏碁自建云.昨天,这个产品在中国台北揭开面纱.搜狐IT前方记者总结了宏碁自建云的几个特点和应用场景: 1,宏基自建云平 宏碁转型自救的策略是什么?创始人施振荣给出的答案是宏碁自建云.昨天,这个产品在中国台北揭开面纱.搜狐IT前方记者总结了宏碁自建云的几个特点和应用场景: 1,宏基自建云平台目前在台北运行,随后将扩展到大陆市场,目标用户是宏基PC的一般用户和中小企业.据施振荣介绍,自建云采取的是开放策略,希望可以争取到Lenovo.HP等P

宏定义的黑魔法 - 宏菜鸟起飞手册

宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那样是每天会接触的东西.即使是能偶尔使