C ++:克++编译器:与虚函数标准输入输出的冲突?(C++: g++ compiler: clas

2019-10-19 11:17发布

我不能够使用虚拟功能(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”的提示,我发现用“-02”选项一起使用时它的工作原理。 链接似乎有/使用时没有“-02”是不同的。

/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,程序甚至不加载! 使用选项“-02”,它工作正常(甚至在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.

另一个提示该程序不加载的是,即使我把睡眠(100),它立刻存在。


总结 :这个问题得到了更新整个Cygwin安装后问题

详细信息 :重新安装只是G ++编译器没有帮助的。 更新只是G ++编译器新版本并没有帮助。 更新整个开发类别没有帮助。 更新的底数类别没有帮助。 更新整个Cygwin安装帮助。 它仍然是每为什么以前的安装仍用“-02”选项时未知。 我还可以继续使用“-02”选项。 但是,我选择了做的cygwin的全面更新。

Answer 1:

我所做的就是更新并重新安装(擦除和下载)多次Cygwin的,但最终事实证明,我不得不降级我的G ++编译器从5.2到4.9。 我想,这已经是与Cygwin的C ++运行时的特定版本。



Answer 2:

在这段代码没有什么,不应该工作。

您可以切换到VirtualBox和Linux上运行虚拟机的gcc,这将是比Cygwin和它在Windows造型Linux以外的.exe的东西更稳健。

看来现在正在测试的cygwin执行编译器。



文章来源: C++: g++ compiler: clash of stdio with virtual functions?