从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失

Posted

技术标签:

【中文标题】从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失【英文标题】:MinGW g++ performance loss after updating from 4.5.0 to 4.6.2 【发布时间】:2012-02-16 16:02:43 【问题描述】:

今天我更新了 MinGW 并重建了我当前的 C++ 项目。自使用 4.5.0 以来,我已经记录了时间信息,并且在使用 4.6.2 版本进行编译时,我看到了巨大的性能损失(大约慢了 4 倍)。

我的构建命令:

g++ -Ilib\svl-1.5\include -Ilib\SDL-1.2.15\include -static-libgcc -static-libstdc++ \
-Ofast -O3 -oecl.exe src\ecl.cpp -lmingw32 -lSDLmain -lSDL -std=c++0x

我在 Window 64 位系统上运行 MinGW。

你知道是什么导致了这种糟糕的表现吗?

我的 bin 文件夹包含一个名为 mingw32-gcc-4.5.0 的文件。 MinGW 4.6 release notes page 表示它可以用于与旧版本一起编译。不幸的是,g++ 没有这样的二进制文件。我读到 gcc 也能够编译 C++,但在我的情况下它不起作用,我只是得到了大量的错误。我只在人们询问如何使用 gcc 编译 C++ 程序的网站上找到了使用 g++ 的提示。

有没有办法让我的 C++ 程序使用 mingw32-gcc-4.5.0 编译?如果没有,还有其他方法可以使用 4.5.0 版进行编译吗? 我想确保糟糕的性能不是由我的代码更改引起的。

编辑

通过运行我在 2010 年下载的旧 MinGW 安装程序,我设法再次安装了 4.5.0。我将代码和构建批处理文件恢复到昨天的状态。还是表现不佳。 MinGW 是否在其安装目录之外安装 DLL 或其他相关文件?

【问题讨论】:

如果您可以尝试找出性能下降的原因,这可能对其他人(以及您自己)有所帮助。 【参考方案1】:

MinGW 是否在其安装目录之外安装 DLL 或其他相关文件?

我不确定这是否适用于您的情况,但我听说某些版本的 MinGW 会在 \MinGW 中查找文件/程序/DLL,即使当前运行的 MinGW 来自不同的位置。

我不确定此行为可能适用于哪个版本,但我建议您仅在机器上安装了唯一的 MinGW 工具链时才使用 \MinGW 进行 MinGW 安装。


找到the source of this advice:

不要将 TDM-GCC 安装到“C:\MinGW”!

之前推荐的路径 安装 MinGW 的位置是“C:\MinGW”。这已不再是这种情况 - 因为其他版本的 GCC 会在该路径中搜索标题和 库,即使它们没有安装在那里。 TDM-GCC 已 修补以解决此问题,但大多数其他 MinGW/GCC 发行版 没有。这意味着,如果您有更多的另一个安装 MinGW 或 MinGW-w64,它将始终在 “C:\MinGW”,你可能最终会使用错误的标题和 图书馆不经意间。因此,现在建议您使用 您的安装路径不同。

【讨论】:

+1,这对其他有同样问题的开发者很有用。但是,我没有安装到 C:\MinGW【参考方案2】:

重新启动是解决方案。它再次适用于 4.5.0 和 4.6.2 这两个版本。现在用 4.6.2 编译的 binaray 性能更好。

在更新 MinGW 之前,我的程序性能一直很稳定,所以我没有想到是我的系统有问题。

但这就是我们的思维方式:如果两件相关的事情同时发生,我们认为第一件事情会导致第二件事情。幻术师正在利用这一事实:P

【讨论】:

以上是关于从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失的主要内容,如果未能解决你的问题,请参考以下文章

使用 MinGW GCC 4.5.0 配置 NetBeans 6.9 时遇到问题

更新后的 XCode 4.6.2 问题。 (错误:从不同分支构建的 PCH 文件)[重复]

Qt 4.6.2静态编译后,创建工程出现中文乱码的解决办法

将 MinGw 编译器集成到 Dev C++

mingw 安装和使用问题

libtool:存档中的对象名称冲突(NETCDF + MinGW)