__gnu_linux__代表什么?

比昂

背景

我们有一些旧的C ++代码,其中包含仅在__gnu_linux__定义了预处理器符号的情况下才编译的部分在我的带有GCC 9.3的Ubuntu 20.04上进行编译不是问题。现在,我们试图将其移植到基于带有GCC 10.2的Alpine Linux的Docker容器,发现__gnu_linux__在这种情况下未定义该容器

因此,我已经搜索了有关__gnu_linux__预处理程序宏的任何文档,但在GCC或其预处理程序CPP的文档中找不到任何内容。我能找到的唯一提示是以下预定义符号列表,但未提及任何文档:https : //sourceforge.net/p/predef/wiki/OperatingSystems/

问题

  • 在哪里可以找到有关__gnu_linux__预处理程序宏的任何官方文档
  • GCC在什么条件下定义它?

到目前为止的研究

通过全文搜索,/usr我获得了一些成功。一个是Boost头文件,也查询该宏,另外两个是二进制文件cc1cc1plus我发现这是分别为C和C ++实现预处理器的GCC内部工具,但是我找不到这些工具的任何正式文档。因此,我已经克隆了GCC源代码仓库,发现它__gnu_linux__在更改日志提及了一次,并且包含一些特殊的提交,用更改了一行__gnu_linux__,但是都没有一个明确的声明。

内特·艾德雷奇

gcc/config/linux.h

#define GNU_USER_TARGET_OS_CPP_BUILTINS()                       \
    do {                                                        \
        if (OPTION_GLIBC)                                       \
          builtin_define ("__gnu_linux__");                     \

因此,它仅在使用glibc的Linux系统上定义。但是Alpine改为使用musl libc

提交中也提到

LINUX_TARGET_OS_CPP_BUILTINS):__gnu_linux__仅为GLIBC定义

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章