我有以下头文件Foo.h:
#ifndef _FOO_H_
#define _FOO_H_
#include <type_traits>
class FooC
{
public:
FooC();
~FooC() = default;
};
#endif // _FOO_H_
以及相应的源文件Foo.cpp:
#include "Foo.h"
FooC::FooC()
{
}
我可以使用以下命令编译源文件
C:\\GNU-Tools-ARM-Embedded\\6-2017-q2-update\\bin\\arm-none-eabi-g++.exe -IC:/gnu-tools-arm-embedded/6-2017-q2-update/arm-none-eabi/include/c++/6.3.1 -std=gnu++14 -o Foo.cpp.obj -c Foo.cpp
或
C:\\GNU-Tools-ARM-Embedded\\7-2018-q2-update\\bin\\arm-none-eabi-g++.exe -IC:/gnu-tools-arm-embedded/7-2018-q2-update/arm-none-eabi/include/c++/7.3.1 -std=gnu++14 -o Foo.cpp.obj -c Foo.cpp
但是当我将 -IC:/ gnu-tools-arm-embedded / ...交换为 -isystem C:/ gnu-tools-arm-embedded / ...
C:\\GNU-Tools-ARM-Embedded\\6-2017-q2-update\\bin\\arm-none-eabi-g++.exe -isystem C:/gnu-tools-arm-embedded/6-2017-q2-update/arm-none-eabi/include/c++/6.3.1 -std=gnu++14 -o Foo.cpp.obj -c Foo.cpp
或
C:\\GNU-Tools-ARM-Embedded\\7-2018-q2-update\\bin\\arm-none-eabi-g++.exe -isystem C:/gnu-tools-arm-embedded/7-2018-q2-update/arm-none-eabi/include/c++/7.3.1 -std=gnu++14 -o Foo.cpp.obj -c Foo.cpp
然后我会遇到很多编译错误,例如:
In file included from Foo.h:4:0,
from Foo.cpp:1:
C:/gnu-tools-arm-embedded/6-2017-q2-update/arm-none-eabi/include/c++/6.3.1/type_traits:68:3: error: template with C linkage
template<typename _Tp, _Tp __v>
^~~~~~~~
...
C:/gnu-tools-arm-embedded/6-2017-q2-update/arm-none-eabi/include/c++/6.3.1/type_traits:2660:3: error: template with C linkage
template<typename _Tp>
^~~~~~~~
我需要此包含路径和 type_traits 的包含,并且不能更改为 -I 。有人知道这个问题很好的解决方案吗?
谢谢!