2

我在 Windows 7 Starter 32bit 下将 MinGW(最初与 mingw-get-inst-20120426.exe 一起安装)与 Eclipse for C/C++(Indigo SR2)结合使用,我刚刚升级到 gcc/g++ 4.7.0:

mingw-get update
mingw-get upgrade

我修复了 Eclipse 保留旧版本参考的问题 ( https://bugs.eclipse.org/bugs/show_bug.cgi?id=206372#c2 )

但是当我尝试运行一个像这个一样简单的程序时,它崩溃了:

#include <iostream>
#include <cstdlib>
using namespace std;
int main (int argc, char* argv[])
{
    cout << "one = " << 1 << "\n";
    return EXIT_SUCCESS;
}

当我尝试调试时,问题似乎来自以下cout行:

cout << "one = " << 1 << "\n";

如果我跨过它,Eclipse 会向我发出这个错误信号:

No source available for "libstdc++-6!_ZNSo9_M_insertIlEERSoT_() at 0x6fc868a8" 

这是单击“跳过”该行后的 IDE 屏幕截图:http: //i.stack.imgur.com/QexxQ.png

同样的程序以前运行良好,但现在不行了。

我什至创建了一个新项目(我没有触及编译器/链接器选项中的任何内容),但同样的问题仍然存在。

请问有人有解决办法吗?

预先感谢您的帮助 :)

4

2 回答 2

4

找到了 !:D

正如 Dennis 所提到的,运行时 dll 似乎与链接时使用的不同。

实际上,Eclipse 链接到C:\mingw\bin\libstdc++-6.dll但在执行时,使用了另一个(即C:\Program Files\gnuplot\bin\libstdc++-6.dll >_<),因为gnuplot (即我很久以前安装了,顺便说一句不错的软件;))将其安装目录添加到PATH(即使C:\ mingw \ bin也在PATH中)(它还添加了一些其他环境变量)

我很生气,我删除了与 gnuplot lol 相关的所有内容(即它从 PATH 中的路径、它的环境变量,然后我卸载了程序)。我还删除了 Cygwin(虽然它不在 PATH 中,但我已经很久没有使用它了,所以......)

然后,我升级到4.7

mingw-get update
mingw-get upgrade

我也做了 Eclipse 的事情

现在一切都很好:

one = 1

:)

C:\Windows\System32>gcc --version
gcc (GCC) 4.7.0
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


C:\Windows\System32>g++ --version
g++ (GCC) 4.7.0
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

如果有帮助,我使用Dependency Walker来确定可执行文件使用了哪个运行时 dll(只需在 Dependency Walker 中加载 exe,然后右键单击 LIBSTDC++-6.DLL > Properties )

于 2012-06-24T10:03:28.667 回答
0

好吧,我知道这个问题得到了很好的回答,但我只是想分享我的经验,因为我被它困惑了很长时间(是的,我很久没有用 C++ 编码了,哈哈)

我意识到这是因为我在安装 JAVA eclipse 时安装了 MinGW 4.8.1 并删除了旧版本(可能是 4.6.2 我记不太清楚了),并且找不到 dll。

我没有更改 Path 中的任何内容。我所做的只是重新安装 MinGW,单击并单击并更新它提供的所有 lib 文件,然后 cin & cout 工作。好吧,我真的不知道为什么会这样,但是现在可以了。

于 2015-01-28T11:22:44.450 回答