Eclipse CDT使用MinGW在控制台中不输出结果。

37

我有一台运行Windows 7 64位操作系统的电脑,尝试安装一个免费的C++ IDE,所以选择安装带有CDT的Eclipse Helios。

对于g++,make和gdb,我按照这个教程安装了msys和mingw: http://wiki.wxwidgets.org/HowTo:_Install_MSYS_and_MinGW_for_use_with_Eclipse_CDT

版本如下:

  • make: GNU make 3.81
  • g++: 4.5.0
  • gdb: 7.1

所以应该与我的64位CPU兼容。

但是当我尝试使用Eclipse运行一个非常简单的程序时,控制台上没有任何输出。源代码如下:

#include <iostream>

 using namespace std;

 int main()
 {
    int i;

    cout << "Enter an integer: " << endl;
    cin >> i;
    cout << endl << "i is " << i << endl;

    return 0;
 }

构建成功,当我使用命令(Windows控制台)启动.exe文件时,它的行为符合预期。 但是在Eclipse控制台中,运行时我看不到任何输出,而调试时只输出:"输入一个整数:",然后当我输入一个数字并按下回车键时,它什么也不做。

请问有人知道如何修复这个问题吗?

谢谢,

Guillaume

PS: 我使用的工具链是"Linux GCC",如果使用"MinGW GCC"根本就没有在控制台看到任何输出。


在Indigo 32位上遇到了相同的问题;purlogic的解决方案奏效了。 - Nathan Fig
9个回答

139

我在64位的Windows 7操作系统上使用MinGW,在Eclipse项目上尝试了以下方法,它对我有效:

右键点击您的项目,选择“属性”。

选择新窗口左侧的“运行/调试设置”属性。

在右窗口中,单击要突出显示的可执行文件(例如- Test.exe),然后单击“编辑”。

在环境选项卡中,点击“New”

名称:PATH
值:指向你的MinGW bin目录的路径。(对于我来说是:C:\devcore\MinGW\bin

单击所有窗口上的“确定”以关闭它们。

再次尝试运行,应该会在屏幕上输出结果。


7
好的!你是如何找到它的?你是这个bug的创建者吗?:-) 在调试模式下会让我很困惑,但命令行却没问题。+1 - Clark Bao
1
非常感谢您找到了解决这个问题的方法 :) - Salil
7
这应该是正确的答案,不需要重新安装 Eclipse!! - Ivan
我想补充一下,你实际上是将bin添加到Eclipse正在使用的路径中。因此,在Windows中将C:\MinGW\bin添加到路径中,它将适用于所有项目。 - Friend of Kim
对于大多数使用MinGW的人来说,该值应该是C:\MinGW\bin。希望这能帮到你,如果你遇到了这个问题,请尝试使用此答案而不是重新安装32位的Eclipse :/ 非常感谢! - julian
显示剩余3条评论

8
你需要设置连接器,我正在使用MinGW。
按照以下步骤操作。
Goto Project > Properties > C/C++ Build > Settings > Tool Settings (Tab) > MinGW C++ Linker (Option) > Add Command (g++ -static-libgcc -static-libstdc++)   (default command is only g++)

以上步骤实际上是在我的情况下阻止Eclipse构建二进制文件。 - user8210645

7

purlogic的解决方案有效。 可以全局设置而不是为每个项目设置:

在Window -> Preferences-> C/C++ -> Build -> Environment中, 添加一个编译器变量。例如,我添加了: MINGW,值为“C:\ MinGW \ bin”


我做了这个,有时它有效,有时它无效。我正在使用Eclipse Juno。 - ikel
那么Purlogic的解决方案在哪里?!似乎找不到它。 - Henrique de Sousa

6

3
也可能发生在Indigo 32位上 - 尝试使用下面purlogic的解决方案。 - Nathan Fig

3
我遇到了同样的问题,因为在一台电脑上安装了多个gcc。但是Greg的解决方案只对我部分有效。
在我的情况下,应用程序没有显式执行刷新操作。虽然C++程序经常使用std::cout << ... << std::endl进行刷新,其中endl执行刷新操作,但我的程序使用实际的C输出,例如通常的printf。当在cmd窗口中启动程序时,可以直接看到printf。但是在eclipse控制台中,它们缺失了。因此,需要在代码中添加刷新操作。
fflush(stdout);

printf完成我的任务后,这可能是eclipse控制台实现中的一个问题。我猜这就是为什么修复路径对于这里的某些人无效的原因。

与在“运行”设置中设置路径不同,另一种解决方案是使用批处理文件启动整个eclipse,它看起来基本上像这样:

set PATH=<mymingwlocation>\bin;%PATH%
start <myeclipselocation>\eclipse.exe

然后,任何运行配置都将默认使用正确的MingW位置。这可能还可以解决由于使用错误的gcc而导致的其他问题。


fflush(stdout) ---- 是关键。非常好用。谢谢! - Khulja Sim Sim

1

我在64-/32位的eclipse Kepler CDT上遇到了这个问题,需要使用MinGW来构建一个openCV/wxWidgets工具,操作系统是Win7。

如果有人在使用openCV时遇到此问题,您可能已经知道互联网上有许多过时的openCV构建/安装说明。

其中一个方法是进入“Build Settings” -> “Linker” -> “Miscellaneous”,在链接器标志文本输入框中键入 -Wl,--subsystem,windows -mwindows 然而,这将禁用在Windows命令行终端输出cout。

进一步研究发现,这似乎是故意的,显然,-mwindows涉及将STDOUT从命令行引导到类似GUI的应用程序。

此外,只需删除-mwindows,并保留-Wl,--subsystem,windows即可完成将STDOUT重定向到命令行之外的任务。

请注意,我还没有创建除涉及wxWidgets和openCV的hello world程序之外的任何东西,因此我还没有达到在GUI的一部分中执行cout的点,因此我不知道该功能是否已被破坏或者它是否会输出到GUI对象以及命令行终端。


1
你尝试以管理员权限运行eclipse.exe了吗?这对我有用!

0

或者设置链接器选项-static。 至少对我来说是有效的。


0
将PATH变量(PATH="你的MinGW/bin目录路径")添加到你的C++项目中,方法是在“Run->Run Configurations->Environment”选项卡中进行。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接