【发布时间】:2012-12-02 17:18:43
【问题描述】:
当我尝试编译下一个简单的代码示例时:
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(如果-Werror 存在,则将-Wp,-w 添加到g++ 的选项列表中。我认为这是一种肮脏的方式。
【问题讨论】:
-
它针对 gcc 4.8.0 20121126 (prerelease) 编译没有错误。
-
谢谢。但是 4.7.x 呢?你能测试一下吗?
-
它也可以针对 g++ 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) 进行编译。也许您的问题与 mingw 有关?
-
非常相似。我尝试在这里(liveworkspace.org)做同样的事情,它的工作原理。但对于 MinGW 的各种构建(例如 MinGW、mingw-w64(mingw-builds 和 rubenvb)),情况并非如此。
-
MinGW-builds 出现同样的错误