我们有一些旧的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__
预处理程序宏的任何官方文档?通过全文搜索,/usr
我获得了一些成功。一个是Boost头文件,也查询该宏,另外两个是二进制文件cc1
和cc1plus
。我发现这是分别为C和C ++实现预处理器的GCC内部工具,但是我找不到这些工具的任何正式文档。因此,我已经克隆了GCC源代码仓库,发现它__gnu_linux__
在更改日志中仅提及了一次,并且包含一些特殊的提交,用更改了一行__gnu_linux__
,但是都没有一个明确的声明。
#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] 删除。
我来说两句