关于__GNU_SOURCE 这个宏

news/2025/1/12 4:07:17/

今天发现一个奇怪的问题,即使
#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 是你当前系统的头文件。


http://www.ppmy.cn/news/632139.html

相关文章

揭开宏的神秘面纱:什么是宏,为什么使用宏?

揭开宏的神秘面纱:什么是宏,为什么使用宏? 您是否曾经在 Microsoft Office 程序中的重复任务上花费了太多的时间?有没有想过可能有更好的办法?也许您需要在一个 Word 长文档中重新设置许多表格的格式,在一…

cmake实现宏控制

cmake可以在编译命令中实现对代码中宏的控制。下面写一个简单的案例。 源文件main.cpp #include <stdio.h>int main() { #ifdef HELLOprintf("this is hello\n"); #elseprintf("this is unknow\n"); #endif return 0; } CMakeLists.txt文件 cmake…

关于宏文档开启宏后还是不能正常使用问题

1.问题 2.开启宏 (62条消息) [Win10Excel365]尽管已启用VBA宏&#xff0c;Excel还是无法运行宏_逍遥猴哥的博客-CSDN博客 3. 问题还是没解决 发现可能是字体显示乱码&#xff0c;导致vba运行找不到争取路径 VBA编辑器中中文乱码的解决办法&#xff1a;1、依次点击【工具→选项…

【红黑树】都这样讲了,不会还有人不会红黑树吧

文章目录 1. 简介红黑树 and 红黑树的性质2. 在红黑树中操作元素2.1 在红黑树中查找一个元素2.2 在红黑树中插入元素 3. 手撕红黑树4. 通过总体聊聊AVL树和红黑树 1. 简介红黑树 and 红黑树的性质 我们在前面学习过二叉树&#xff0c;而二叉树有被简单的分为普通二叉树&#x…

git常用命令之Rebase

6. Rebase 命令作用延展阅读git rebase origin/release以origin/release的代码为基础变基自证 场景1&#xff1a;一次基于 rebase 的代码提交 命令作用延展阅读1. git fetch2. git checkout -b dev2 origin/dev23. date >> 1.txt && git add . && git…

HTML <img> 标签

浏览器支持 元素ChromeIEFirefoxSafariOpera<img>YesYesYesYesYes所有浏览器都支持 <img> 标签。 定义和用法 img 元素向网页中嵌入一幅图像。 请注意,从技术上讲,<img> 标签并不会在网页中插入图像,而是从网页上链接图像。<img> 标签创建的是被…

修改鼠标指针的样式,让鼠标变成动态个性化图标,让你的鼠标图标更炫酷起来。

我鼠标修改后的样式&#xff1a; 它其实时一个动态的&#xff0c;鼠标按钮的蓝色部分一直会在一闪一闪的。当然还有好几种颜色的闪烁。 首先打开控制面板–>搜索鼠标。 如下图&#xff1a; 找到 一个鼠标指针图片下载网站&#xff0c;如下图&#xff1a; 然后下载其中想要…

何不给你单调的鼠标指针换一个好看的样式?(Windows系统下)

鼠标指针是我们日常操控电脑最基本的工具&#xff0c;用久了难免会有些单调。换一个更好看或更炫酷的皮肤&#xff0c;或许会给你带来不一样的心情&#xff01; 这是我新换的鼠标指针样式&#xff0c;是不是很有意思。 访问这个网站&#xff1a;点击跳转 里面有几百种鼠标指针…