【问题标题】:g++ (MinGW), C++11 and SSEg++ (MinGW)、C++11 和 SSE
【发布时间】: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 出现同样的错误

标签: c++ gcc c++11 mingw


【解决方案1】:

这个错误是在 mingw-w64 主干上的错误提交。我为此写了一个错误报告。谢谢!

【讨论】:

  • 您能添加错误报告的链接吗?
  • 我写信给 mingw-w64 邮件列表。但是这个错误是陌生的。 Mingw-builds rev3 没有这个错误,但 rev4 有。我们现在讨论它
  • 我进行了一些研究,发现它在 gcc 的 multilib 版本中存在错误。我在构建的所有变体中运行您的示例并有下一张图片:它适用于 dwarf 构建和 32 位 nomultilib 构建;在 32-multilib 构建上使用 -m32;在 32-multilib 构建上使用 -m64 失败;在所有 64 位 multilib 构建上失败。我只在 gcc-4.7.2 上尝试过。
  • 此错误已在 mingw-w64 主干中修复。 mingw-builds 的下一个版本将使用此修复程序。
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 2014-07-23
  • 2013-07-03
  • 1970-01-01
相关资源
最近更新 更多