这个问题涉及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
?
答案 0 :(得分:1)
这是一个错误(https://bugs.launchpad.net/gcc-arm-embedded/+bug/1661882)。它已被修复。它将在“6-2017-q1-update”中。