_GUN_SOURCE宏
问题描述:在编译程序时,提示一个错误和一个警告。
error:storage size of tz isn’t know; 其中tz是struct timezone类型的变量。
warning:implicit declaration of function lstat;
使用man手册查了一下,发现tz需要加上sys/time.h头文件,lstat需要加上sys/lstat.h头文件,但这两个头文件都已经包含了,百思不得其解。
无意间搜到一种解决方案,在编译时加上-D_GNU_SOURCE(定义_GNU_SOURCE宏),于是照做,程序编译通过。继续了解了_GNU_SOURCE宏,发现它是在features.h中用于特性控制的一个功能测试宏,而上面提到的两个头文件sys/time.h, sys/stat.h都包含了features.h文件。
</user/include/features.h>
/* 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 200809L
# undef _XOPEN_SOURCE
# define _XOPEN_SOURCE 700
# 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
其中_ISOC99_SOURCE, _POSIX_SOURCE, _XOPEN_SOURCE都是功能测试宏,用于指示是否包含对应标准的特性,而这些不同的特性源于过去20多年来进行的各种标准化工作(ANSI, ISO, POSIX, FIPS等),不同的标准支持实现了不同的特性,如系统时间的获取,stat结构是在ANSI标准中是不支持的,而定义了_GNU_SOURCE相当于开启了对所有特性的支持。
另外一个问题:在程序运行时,提示mmap出错,错误号22(Invalid argument)。
我的工作目录是window桌面上的一个目录,通过虚拟机工具共享到linux里使用,mmap映射的文件也在这个目录中。
怀疑是虚拟机内存不足,看了下freemem,内存是足够的,把机器重启了,依然出现同样的问题。把代码拷到机房的机器(64bit),编译运行,工作正常。猜想被映射的文件不是系统下的文件导致映射失败,于是把被映射文件拷到家目录下,工作正常。原理我也解释不清楚,理论上能打开文件不就能进行内存映射么?
转载于:https://www.cnblogs.com/yunnotes/archive/2013/04/19/3032359.html
_GUN_SOURCE宏相关推荐
- 关于__GNU_SOURCE 这个宏
今天发现一个奇怪的问题,即使 #include sys/stat.h 在使用 lstat 函数的时候还是会报 warning: implicit declaration of function 'l ...
- C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define
C/C++预处理器在源代码编译之前对其进行一些文本性质的操作. 它的主要任务包括删除注释 . 插入 #include 指令包含的文件的内容 . 定义和替换由 #defme 指令定义的符号以及确定代码的 ...
- OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)
1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...
- TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成
TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成 这个PR增加了对分区.编译和运行TensorRT BYOC目标的支持. Building 有两个新的cmake标志: ...
- 打开word出现“您正试图运行的函数包含有宏或需要宏语言支持的内容。”的解决方法
1.Word选项→加载bai项→管理→转到--,转到→把勾勾都取消→确定即可. 2.工具→宏->安全性→可靠发行商,将下方的选择框中的钩清空,再将宏安全性改为最高. 3.可能是初次安装Offic ...
- C++ #define(宏定义)的使用
C++ 宏定义 #define命令是C++语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 宏定义的一般形式 #define <宏名& ...
- 宏使用 Tricks
人为地定义一些"无意义"的宏(宏名本身有意义),以起到提升代码程序的可读性. 1. IN/OUT 指定参数用于输入还是输出: #define IN #define OUTvoid ...
- Keil中使用宏编译来定义DEBUG输出
使用宏编译来格式化调试信息,是一个不错的方法,即可以在需要的时候打印出信息,还可以格式化我们所需要的输出. #define DEBUG 1 #if (DEBUG == 1) #define DBG(A ...
- 子程序调用与宏定义的异同_如何用数控系统进行简单的宏程序调用?老师傅告诉你,用G65就行...
什么是简单调用?很多人都不知道吧,如果想要深入操作宏, 就先要学会变量,学会变量之担,再去操作宏,就会变得非常的简单,今天给大家分享如何用G65进行简单的宏程序调用. 用户宏的简单宏调用是指在主程序中 ...
最新文章
- Struts和Spring使用的模板初探
- BIG DATA 大数据时代来临
- oracle账户锁定解决方法
- linux下lua开发环境安装
- HCharts随笔之简单入门
- python实现深度优先搜索_python中的深度优先搜索算法
- Java编程程序异常处理方法
- 【转载】不带www跳转www.设定网站唯一入口,提升权重!
- Ubuntu 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
- 3.9 Spark 键值对RDD编程
- android html文字垂直居中,Android EditText文本不是垂直居中的
- cbac式_CBAC
- 4418GPIO口调用过程
- OA系统的集成与整合:打破信息孤岛,实现企业信息化融会贯通
- C语言调试(Dev-C++)(初步)
- 239页10万字“联、管、用”三位一体雪亮工程整体建设方案
- ip地址转换成字符串
- E销宝:dsp广告应该怎么投放?
- Android基础篇-五大存储方式之一数据库存储
- vs2019 中文离线安装包下载,类似ISO