我无法将stdio与虚拟功能结合使用(Windows Vista,Cygwin,GCC 4.8.2)
#include <stdio.h>
class A
{
public:
// If I make g() as virtual, stdio doesn't print.
virtual void g() {}
};
int main()
{
A a; // Or I could remove this object to make stdio print.
printf("testing\n");
}
通过“Borgleader”的提示,我发现它与“-O2”选项一起使用时有效。当使用/不使用“-O2”时,链接似乎有所不同。
/home/user> g++ test.cc
/home/user> ./a.exe
/home/user> ldd ./a.exe
ntdll.dll => /cygdrive/c/Windows/system32/ntdll.dll (0x77540000)
kernel32.dll => /cygdrive/c/Windows/system32/kernel32.dll (0x75790000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll (0x6bf40000)
cygstdc++-6.dll => /usr/bin/cygstdc++-6.dll (0x6c480000)
/home/user> g++ -O2 test.cc
/home/user> ./a.exe
testing
/home/user> ldd ./a.exe
ntdll.dll => /cygdrive/c/Windows/system32/ntdll.dll (0x77540000)
kernel32.dll => /cygdrive/c/Windows/system32/kernel32.dll (0x75790000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
感谢selbie建议尝试GDB。现在情况有点清楚了。我应该忘记printf,程序甚至没有加载!使用选项“-O2”,它可以正常工作(即使在GDB中)。
/home/user> g++ -g test.cc
/home/user> gdb ./a.exe
<<Edited for brevity>>
(gdb) break main
Breakpoint 1 at 0x40119e: file test.cc, line 14.
(gdb) run
Starting program: /home/user/a.exe
[New Thread 4888.0x13e0]
gdb: unknown target exception 0xc0000139 at 0x77549cfc
During startup program exited with code 0xc0000139.
程序未加载的另一个提示是,即使我将sleep(100)放入其中,它也会立即存在。
摘要:更新整个cygwin安装后问题得到解决
详细信息:重新安装只是g ++编译器没有帮助。仅将g ++编译器更新到新版本没有帮助。更新整个开发类别没有帮助。更新基类没有帮助。更新整个cygwin安装有帮助。根据为什么以前的安装仍然使用“-O2”选项仍然未知。我可以继续使用“-O2”选项。但是,我选择完全更新cygwin。
答案 0 :(得分:1)
我所做的是多次更新并重新安装(擦除和下载)Cygwin,但最后我发现我必须将我的g ++编译器从5.2降级到4.9。我想这与Cygwin C ++运行时的特定版本有关。
答案 1 :(得分:0)
此代码中的任何内容均不起作用。
你可以切换到VirtualBox并在Linux VM上运行gcc,这将比在Windows上为Linux建模的cygwin和其他.exe内容更强大。
似乎现在你正在测试编译器的cygwin实现。