使用Windows和MinGW编写的Eclipse中的C++程序无法在控制台视图中显示输出

14

我使用的是64位Windows 7操作系统。

我安装了Eclipse版本3.6.2、CDT和MinGW。我在Eclipse中有一个C++控制台程序,如下所示:

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    setbuf(stdout, NULL);

    for (int i = 0; i < 10000000; i++) {
        cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    }
    int val;
    cin >> val;

    return 0;
}
如果我运行这个控制台程序,它应该在Eclipse的Console View中显示"Hello world",但是什么也没显示。
如果我进入debug文件夹并运行exe文件,则会在控制台上打印出来。
如果我犯了一些语法错误,那么Eclipse的Console View将会显示一些信息,例如:
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\hh.o ..\src\hh.cpp
..\src\hh.cpp: In function 'int main()':
..\src\hh.cpp:17:3: error: expected ';' before 'return'
Build error occurred, build is stopped
Time consumed: 255 ms.   

为什么Eclipse控制台视图没有显示任何内容,我该如何让我的C++控制台程序显示输出?


是的...64位Windows/Eclipse/CDT/Java/Cygwin没有控制台输出:http://www.eclipse.org/forums/index.php?S=42e862594001fa4469bbc834885d545f&t=msg&th=197552。相当令人惊讶,不是吗? - Trevor Boyd Smith
我刚刚发现了这个问题。现在我需要降级到32位的Eclipse。摇头 - Trevor Boyd Smith
13个回答

22
我在这个网站找到了一种解决方法: http://www.eclipse.org/forums/index.php?=42e862594001fa4469bbc834885d545f&t=msg&th=197552, 请查看“No real Name”所回复的内容。
如果链接失效,以下是内容:
Environment: jdk1.6u18 64bit + Eclipse Helios 64bit + win7 64bit

No console output at "Run", but output correctly at "Debug".

The following method worked for me:

1.  Goto Project->Properties->Run/Debug Settings, choose the .exe file 
and press "Edit"

2.  In the "Environment" tag, press "New", set it as: 
    "Name:PATH"
    "Value:C:\MinGW\bin"

In fact, I have already set "C:\MinGW\bin" in windows PATH environment 
variable, but it seemed to not work.

1
这对我有用(除了在我的情况下,我添加了Cygwin路径)。你有任何想法为什么这是必要的吗?如果我进入C++构建设置,路径已经存在,那么为什么需要添加两次? - gsgx

5
问题在于你的程序使用了MinGW的dll库——尝试手动启动exe文件,它会报告一些关于缺少dll的错误。
解决方案是将所需的dll复制到项目目录中的.exe文件中(取决于您使用运行命令执行的是Release还是Debug子目录)。
或者,在菜单“运行->运行配置”中选择用于该.exe文件的配置(或创建新的C/C++应用程序配置),并在右侧面板中选择环境选项卡。在那里添加一个名为PATH的新变量,值为c:\MinGW\bin(这是mingw\bin目录的默认路径,请使用适用于自己安装的路径,如果它在其他位置)。编辑:现在我正在查看Vikyboss的帖子,实际上是相同的——在运行配置中设置PATH变量。按照Sydraps所述在“首选项->C/C++(展开)->环境”中设置PATH变量对我没有效果。
但我认为静态链接这些库可能是最好的解决方案。在菜单“项目->属性”中选择“C/C++构建->设置”。在右侧面板中选择要更改的配置(可以选择全部)。在选项卡“工具设置”中选择“MinGW C++链接器->其他”,在右侧面板中的“链接器标志”中键入-static。现在.exe将受到库的大小膨胀(在我的情况下,Hello world示例需要2个dll,大约增加了900kB),但它将独立于任何库。
我希望这对于想要从Eclipse C/C++开始并想知道为什么控制台中没有Hello world的任何人都有所帮助。 Ales Chlubny

谢谢。这让我疯了,因为我通常不使用Windows,所以我很难找到问题所在。 - MegFord

3

我已经在我的Windows 7 x64电脑上解决了这个问题。在Eclipse窗口中,转到“首选项” > “C/C++”(展开)>“环境”>“添加”:

"Name:PATH"
    "Value:C:\MinGW\bin"

如果这不能解决问题,请尝试将上述内容添加到计算机的系统环境变量中,方法是在“计算机”>“高级系统设置”中进行。

2

我发现问题的原因是因为我使用了64位的eclipse!

我转换成32位的eclipse后,同样的代码正常工作。


2

当我以管理员身份运行eclipse时,解决了在控制台显示hello world(64位Windows 7)的问题。

我将C:\MinGW\bin添加到环境变量路径中,然后以管理员身份启动eclipse。


1

我从Eclipse向导中创建了一个Hello World C++项目(MinGW GCC)应用程序,剪切并粘贴了您的代码,它编译得很好。然后在运行之前,我将您的循环减少到10,它也可以正常运行。

您没有说明如何创建您的项目,但似乎您缺少一些包含指令或库路径。此外,我认为不需要包含或设置setbuf(stdout, NULL)。在故障排除时,我发现将整个命名空间引入范围并不是很有帮助。相反,可以这样做: using std::cout; using std::cin;

最后,每次使用<< endl; 刷新缓冲区似乎有些过度,将一个简单的\n添加到字符串的末尾会更有效率。 (我在Win 7 64位上完成了所有这些操作,但我使用的是32位版本的Eclipse Galileo)


"<< endl" 不会清空缓存区,它只是一个换行符。 - ALOToverflow
我猜这是正确的,因为流现在是无缓冲的,而endl会添加一个新行并刷新有缓冲的流。但是,为了尝试让某些简单的东西工作,我不认为增加看起来是不必要的复杂性有意义。 - Tod

1
如果您正在使用MinGW编译器,为您的新项目添加"-static-libgcc -static-libstdc++"作为链接器标志。这段文本应该添加到链接器标志字段中,该字段可以通过右键单击项目资源管理器中的新项目并单击属性来找到。在项目属性下,展开C/C++构建菜单并单击设置。在工具设置选项卡下,展开MinGW C++链接器菜单并单击杂项。将文本添加到链接器标志字段中,然后单击应用按钮。

http://orfe.princeton.edu/help/article-296


0

我的方法是在Eclipse Kepler 64位版本上以管理员身份运行。


0

如果有人感兴趣,我找到了如何在Windows XP上永久修复它的方法(尽管可能适用于其他Windows版本),而无需指定每个可执行文件的变量等:

开始菜单> 右键单击我的电脑>属性>高级选项>环境变量

在“用户变量”字段中,

  • 如果存在名为PATH的环境变量,请选择修改并将此信息添加到字段的末尾,以分号分隔:

C:\MinGW\bin

例如: C:\SomeDirectory; C:\Another; C:\MinGW\bin

  • 如果环境变量PATH不存在,请添加一个新的环境变量,并使用以下信息:

名称:PATH

值:C:\MinGW\bin

接受所有内容,您应该可以获得控制台输出:)


0
刚刚在Windows 7 64位系统中将C:\MinGW\bin添加到环境变量'Path'中。 现在控制台可以输出信息了。

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