【问题标题】:C++ program written in Eclipse using Windows and MinGW cannot display output to console view使用 Windows 和 MinGW 用 Eclipse 编写的 C++ 程序无法将输出显示到控制台视图
【发布时间】:2011-08-23 00:38:59
【问题描述】:

我使用的是 Windows 7 64 位。

我安装了 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 的控制台视图中显示 Hello world,但什么也没有显示。

如果我转到调试文件夹并运行 exe,它会打印到控制台。

如果我犯了一些语法错误,那么 Eclipse 控制台视图会显示一些内容,例如:

**** 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 没有控制台输出:eclipse.org/forums/…。非常棒,不是吗?
  • 我刚刚发现了这一点。现在我需要降级到 32 位 eclipse。 摇头

标签: c++ eclipse console eclipse-cdt


【解决方案1】:

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

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

在“用户变量”字段中,

  • 如果有一个名为 PATH 的环境变量,请选择 Modify 并将此信息添加到 Value 字段的末尾,用分号分隔:

C:\MinGW\bin

示例: C:\某目录; C:\另一个; C:\MinGW\bin

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

名称: 路径

值: C:\MinGW\bin

全部接受,你应该得到控制台输出:)

【讨论】:

    【解决方案2】:

    在 Eclipse Kepler 64 位上转为管理员为我工作。

    【讨论】:

      【解决方案3】:

      如果你使用的是 MinGW 编译器,

      添加 -static-libgcc -static-libstdc++ 作为新的链接器标志 项目。此文本应添加到 Linker flags 字段,该字段 可以在Project中右键新建Project找到 资源管理器并单击属性。在项目属性下, 展开 C/C++ Build 菜单并单击 Settings。在工具下 设置选项卡,展开 MinGW C++ 链接器菜单并单击 各种各样的。将文本添加到 Linker flags 字段,然后单击 应用按钮。

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

      【讨论】:

        【解决方案4】:

        我在我的 Windows 7 x64 PC 上解决了这个问题。在 Eclipse 窗口中,转到 Preferences > C/C++ (Expand it) > Environment > Add:

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

        如果这不能解决问题。尝试在计算机 > 高级系统设置中将上述内容添加到 PC 上的系统环境变量中

        【讨论】:

          【解决方案5】:

          我从这个网站找到了一个解决方法: http://www.eclipse.org/forums/index.php?=42e862594001fa4469bbc834885d545f&t=msg&th=197552

          在那个链接,看看“没有真实姓名”的回复。

          如果链接失效,这里是内容:

          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.
          

          【讨论】:

          • 这对我有用(除了在我的情况下,我添加了 Cygwin 路径)。你知道为什么这是必要的吗?如果我进入C++ Build设置,路径已经存在了,为什么还要添加两次呢?
          【解决方案6】:

          我遇到了类似的问题。

          环境:

          jdk1.6u18 64bit + Eclipse Helios 64bit + win7 64bit

          “运行”时没有控制台输出,但“调试”时正确输出。

          以下方法对我有用:

          1. 转到项目 > 属性 > 运行/调试设置

            选择 .exe 文件并按“编辑”

          2. 在“环境”标签中,按“新建”,设置为:

          “名称:路径”

          “值:C:\MinGW\bin”

          其实我已经把“C:\MinGW\bin”设置为Windows PATH环境变量了,但是好像不行。

          【讨论】:

            【解决方案7】:

            刚刚在 Windows 7 64 位中将 C:\MinGW\bin 添加到环境变量“路径”中。 现在控制台输出消息

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

                问题是你的程序使用了 MinGW 的 dll 库 - 尝试手动启动 exe 文件,它会报告一些关于缺少 dll 的错误。

                解决方案可以是,您将所需的 dll 复制到项目目录中的 .exe 文件(以及 Release 或 Debug 子目录,取决于您使用 Run 命令执行的 .exe)。

                或者,在菜单运行 -> 运行配置 中选择您用于该 .exe 文件的配置(或创建新的 C/C++ 应用程序配置)并在右侧面板中选择环境选项卡。添加名为 PATH 的新变量,其值为 c:\MinGW\bin (这是 mingw\bin 目录的默认路径,如果它在其他地方,请使用对您的安装有效的路径)
                编辑:现在我正在查看 Vikyboss 的帖子,实际上它是相同的 - 在运行配置中设置 PATH 变量。如 Sydraps 所述,在 Preferences > C/C++ (Expand it) > Environment 中设置 PATH 变量对我不起作用。

                但我认为静态链接这些库可能是您的最佳解决方案。在菜单 Project -> Properties 中选择 C/C++ Build -> Settings。在右侧面板中选择您要更改的配置(您可以选择全部)。在标签 Tool Settings 中选择 MinGW C++ Linker -> Miscellaneous 并在右侧面板的 Linker flags 中输入 -static强>。现在 .exe 将因库的大小而膨胀(在我的情况下,Hello world 示例大约为 +900kB,需要 2 个 dll),但它在任何库中都是独立的。

                我希望这对任何尝试使用 Eclipse C/C++ 并想知道为什么控制台中没有 Hello world 的人有所帮助。 麦芽酒

                【讨论】:

                • 谢谢。这让我发疯了,而且由于我通常不使用 Windows,我很难找到问题所在。
                【解决方案10】:

                我的 eclipse-cdt 有问题,新的 C++ 项目 > hello world (cygwin gcc),右键单击 exe 文件,运行为,控制台上没有显示任何内容。 c项目也是如此。

                我看到我的eclipse版本已经是32位了。

                我想通了,这里是我的解决方案:

                eclipse cdt 中有几个编译配置文件:release 和 debug。 eclipse cdt 中的默认配置文件是调试。因此,使用“运行方式”启动 exe 不起作用,您应该使用“调试方式”启动它。就我而言,我使用的是最新的 cygwin 安装,安装了 gcc,但尚未安装 gdb。我必须使用 cygwin-setup 在 cygwin 中安装 gdb 包。我使用“debug as”重新运行了 exe,它成功了。

                我猜使用发布配置文件而不是默认调试配置文件,重建也可以,我猜它与 mingw 环境相同。

                【讨论】:

                  【解决方案11】:

                  对我来说,安装 32 位版本的 Eclipse (Indigo 3.7) 和 32 位 Java JDK/JRE 不起作用。我使用 Eclipse CDT/User/FAQ 中更快的解决方案:

                  引用Eclipse CDT/User/FAQ - Eclipse console does not show output on Windows:

                  Eclipse 控制台在 Windows 上不显示输出 在 Eclipse CDT 上 Windows,正在运行或调试的程序的标准输出是完全 缓冲,因为它没有连接到 Windwos 控制台,而是连接到 管道。有关详细信息,请参阅错误 173732。在之后添加 fflush 调用 每个 printf 或在 main 开头添加以下行 功能:

                  setvbuf(stdout, NULL, _IONBF, 0); 
                  setvbuf(stderr, NULL, _IONBF, 0);
                  

                  【讨论】:

                    【解决方案12】:

                    我找到原因了,就因为我用的是64bit eclipse!

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

                    【讨论】:

                      【解决方案13】:

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

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

                      最后,每次用 (我在 Win 7 64 位上完成了所有这些 - 但我使用的是 Eclipse Galileo 的 32 位版本)

                      【讨论】:

                      • '
                      • 我猜这是真的,因为流现在没有缓冲,并且 endl 添加了一个新行并刷新 缓冲 流。仍然试图让一些简单的工作变得简单,我认为添加看似不必要的复杂性没有意义。
                      猜你喜欢
                      • 2011-11-20
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-03-27
                      • 2014-05-03
                      • 2011-08-25
                      • 1970-01-01
                      • 2015-02-22
                      相关资源
                      最近更新 更多