使用g ++和specs-file

时间:2017-01-08 17:48:04

标签: c++ c gcc c-preprocessor newlib

这个问题涉及arm-none-eabi-g ++ 6.2以及与newlib-nano的链接。

当我使用-specs=nano.specs预处理 C-source 时,会包含目录newlib.h中的文件newlib-nano

echo '#include <string.h>' |\
/opt/gcc-arm-none-eabi-6_2-2016q4/bin/arm-none-eabi-gcc -specs=nano.specs -x c -E - |\
grep '^# 1 .*newlib\.h'

输出# 1 "/opt/gcc-arm-none-eabi-6_2-2016q4/arm-none-eabi/include/newlib-nano/newlib.h" 1 3 4(如预期的那样)。这是因为文件nano.specs包含(等等)行

%rename cpp     nano_cpp
 
*cpp:
-isystem =/include/newlib-nano %(nano_cpp)

但是,如果我通过相同的编译器提供 C ++ - 源

echo '#include <string.h>' |\
/opt/gcc-arm-none-eabi-6_2-2016q4/bin/arm-none-eabi-gcc -specs=nano.specs -x c++ -E - |\
grep '^# 1 .*newlib\.h'

输出显示为# 1 "/opt/gcc-arm-none-eabi-6_2-2016q4/arm-none-eabi/include/newlib.h" 1 3

换句话说:specs-file被忽略。

我知道我应该在C ++源代码中包含<cstring>而不是<string.h>,并且…/arm-none-eabi-c++而不是…/arm-none-eabi-gcc -x c++通常会调用GNU g ++但我这样做是为了划出的差异。并且:这不会改变这个问题。

问题:我需要添加什么来让规范文件让C ++文件包含newlib-nano/newlib.h

1 个答案:

答案 0 :(得分:1)

这是一个错误(https://bugs.launchpad.net/gcc-arm-embedded/+bug/1661882)。它已被修复。它将在“6-2017-q1-update”中。