我在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"
以下是点击“Step Over”行后的IDE的屏幕截图:http://i.stack.imgur.com/QexxQ.png
同样的程序之前工作正常,但现在却没有。
我甚至创建了一个新项目(我没有触及编译器/链接器选项中的任何内容),但仍然存在同样的问题。
有人有解决方案吗?
提前感谢您的帮助:)
答案 0 :(得分:4)
如Dennis所述,似乎运行时dll与链接时使用的运行符不同。
实际上,Eclipse链接了 C:\ mingw \ bin \ libstdc ++ - 6.dll ,但在执行时,又使用了另一个(即 C:\ Program Files \ gnuplot \ bin \ libstdc ++ - 6.dll &gt; _&lt;)因为gnuplot(我很久以前安装了,顺便说一下好的软件;))将其安装目录添加到 PATH < / strong>(即使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&gt;属性)
答案 1 :(得分:0)
嗯,我知道这个问题得到了很好的回答,但我只是想分享一下我的经验,因为我很长一段时间都被它弄糊涂了(是的,我已经很长时间没用C ++进行编码了)
我意识到发生这种情况是因为我在安装JAVA eclipse时安装MinGW 4.8.1并删除了旧版本(可能是4.6.2我不记得了),并且dll无处可寻。
我没有更改Path中的任何内容。我所做的只是重新安装MinGW,单击并单击,并更新它提供的所有lib文件,然后cin&amp;工作。 好吧,我真的不知道为什么和wth正在进行,但是现在它可以工作了。