当我尝试编译下一个简单的代码示例时:
echo "#include <cmath>" | g++ -x c++ -c - -m64 -mfpmath=both -std=gnu++11 -o /dev/null
(与-m64
选项一起被激活(默认情况下)使用SSE(比如AVX))。
出现以下错误消息:
In file included from <stdin>:1:0:
c:\mingw64\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/cmath:1040:11: error: '::double_t' has not been declared
c:\mingw64\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/cmath:1041:11: error: '::float_t' has not been declared
这是一个错误吗?
如果没有-mfpmath=both
选项,则不会发生错误。
我的解决方法是将-D__FLT_EVAL_METHOD__=2
(-Wp,-w
如果-Werror
存在,因为“重新定义”警告)添加到g++的选项列表。我认为这是一种肮脏的方式。