问题描述:在编译程序时,提示一个错误和一个警告。

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宏相关推荐

  1. 关于__GNU_SOURCE 这个宏

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

  2. C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define

    C/C++预处理器在源代码编译之前对其进行一些文本性质的操作. 它的主要任务包括删除注释 . 插入 #include 指令包含的文件的内容 . 定义和替换由 #defme 指令定义的符号以及确定代码的 ...

  3. OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)

    1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...

  4. TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成

    TensorRT宏碁自建云(BYOC, BuildYourOwnCloud)上集成 这个PR增加了对分区.编译和运行TensorRT BYOC目标的支持. Building 有两个新的cmake标志: ...

  5. 打开word出现“您正试图运行的函数包含有宏或需要宏语言支持的内容。”的解决方法

    1.Word选项→加载bai项→管理→转到--,转到→把勾勾都取消→确定即可. 2.工具→宏->安全性→可靠发行商,将下方的选择框中的钩清空,再将宏安全性改为最高. 3.可能是初次安装Offic ...

  6. C++ #define(宏定义)的使用

    C++ 宏定义 #define命令是C++语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 宏定义的一般形式 #define <宏名& ...

  7. 宏使用 Tricks

    人为地定义一些"无意义"的宏(宏名本身有意义),以起到提升代码程序的可读性. 1. IN/OUT 指定参数用于输入还是输出: #define IN #define OUTvoid ...

  8. Keil中使用宏编译来定义DEBUG输出

    使用宏编译来格式化调试信息,是一个不错的方法,即可以在需要的时候打印出信息,还可以格式化我们所需要的输出. #define DEBUG 1 #if (DEBUG == 1) #define DBG(A ...

  9. 子程序调用与宏定义的异同_如何用数控系统进行简单的宏程序调用?老师傅告诉你,用G65就行...

    什么是简单调用?很多人都不知道吧,如果想要深入操作宏, 就先要学会变量,学会变量之担,再去操作宏,就会变得非常的简单,今天给大家分享如何用G65进行简单的宏程序调用. 用户宏的简单宏调用是指在主程序中 ...

最新文章

  1. Struts和Spring使用的模板初探
  2. BIG DATA 大数据时代来临
  3. oracle账户锁定解决方法
  4. linux下lua开发环境安装
  5. HCharts随笔之简单入门
  6. python实现深度优先搜索_python中的深度优先搜索算法
  7. Java编程程序异常处理方法
  8. 【转载】不带www跳转www.设定网站唯一入口,提升权重!
  9. Ubuntu 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
  10. 3.9 Spark 键值对RDD编程
  11. android html文字垂直居中,Android EditText文本不是垂直居中的
  12. cbac式_CBAC
  13. 4418GPIO口调用过程
  14. OA系统的集成与整合:打破信息孤岛,实现企业信息化融会贯通
  15. C语言调试(Dev-C++)(初步)
  16. 239页10万字“联、管、用”三位一体雪亮工程整体建设方案
  17. ip地址转换成字符串
  18. E销宝:dsp广告应该怎么投放?
  19. Android基础篇-五大存储方式之一数据库存储
  20. vs2019 中文离线安装包下载,类似ISO

热门文章

  1. 菜鸟机器学习散点总结(一)
  2. 回文绝对求下联:亚冠决赛决冠亚
  3. MongoDB - 它是什么?从哪里来?
  4. Linux系统资源控制
  5. JavaFX 概述 (译)
  6. Js将字符串转数字的方式
  7. devops_您无法购买DevOps
  8. 编程道场_编码道场教给我有关敏捷的知识
  9. 微信付费付费链接制作_为什么我编码但不为此付费
  10. 异常 | 求你别再写满屏的try-catch了,用全局异常好吗?- 夹私货-行测