#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}
那么我如何让正常模式和调试模式都能工作,为什么我必须首先包含该路径(它已经在我的Cygwin路径中,为什么CDT需要它?)?另外,如果我在运行配置中添加路径,为什么它也会被添加到调试配置中?
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}
那么我如何让正常模式和调试模式都能工作,为什么我必须首先包含该路径(它已经在我的Cygwin路径中,为什么CDT需要它?)?另外,如果我在运行配置中添加路径,为什么它也会被添加到调试配置中?
来自Eclipse CDT的信息: 在Windows上,由于程序的标准输出不是连接到Windows控制台而是连接到管道,因此运行或调试程序时标准输出将完全缓冲。有关更多详细信息,请参见错误173732。可以在每次printf之后添加flush调用,或者在主函数开始时添加以下行:
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
在gdb 7.3之前,添加路径是正确的。现在当我添加路径后,我不能再使用断点,因为它找不到dll文件,因为它们不再是路径的一部分。要解决这个问题,您可以按照以下说明轻松地从环境中添加整个路径。
left click the project
enter the RUN/DEBUG settings for the project
select the executable
click edit
select Environment Tab
click Select...
scroll down to Path (Case sensitive)
check mark Path
press OK
press OK
press OK
Path
大小写在我更新环境变量路径时很重要,如:c:\cygwin\bin;${env_var:Path}
。 - bvj需要设置链接器 我正在使用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++)
如果您的C或C++应用程序的目标是Cygwin,请不要在Eclipse内部调试或运行。TK链接到“你会度过糟糕的时光”模因。
Cygwin的stdout/stderr存在问题,如果您从正常的Cygwin控制台(其中您将运行bash)运行程序,则不会显示这些问题,但几乎可以在其他任何方式下运行它们时显示出来。
Linux和其他支持posix环境中程序运行其他程序的正常方式是将i/o重定向到pty。Cygwin无法在Windows中100%支持pty。
@infoartenovo的答案中的setvbuf调用可以缓解一些问题。
这个问题的另一个方面是使用Windows的Console API编写的应用程序在pty中无法很好地工作。
我们都是一场不可赢得的战争中的牺牲品。
http://cygwin.com/ml/cygwin/2011-12/msg00236.html https://code.google.com/p/mintty/issues/detail?id=56