6

该问题涉及 arm-none-eabi-g++ 6.2 并链接到 newlib-nano。

当我使用 预处理C 源时,目录中-specs=nano.specs的文件包括:newlib.hnewlib-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 文件被忽略。

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

问题:我必须在规范文件中添加什么才能让 C++ 文件包含newlib-nano/newlib.h

4

1 回答 1

1

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

于 2017-02-13T16:03:46.303 回答