簡體   English   中英

C ++:g ++編譯器:stdio與虛函數的沖突?

[英]C++: g++ compiler: clash of stdio with virtual functions?

我無法將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進行完全更新。

我所做的是多次更新和重新安裝(擦除和下載)Cygwin,但是最后我發現我不得不將我的g ++編譯器從5.2降級到4.9。 我想這與Cygwin C ++運行時的特定版本有關。

此代碼中沒有任何內容不起作用。

您可以切換到VirtualBox並在Linux VM上運行gcc,這將比cygwin和其他在Windows上為Linux建模的.exe東西更強大。

似乎現在您正在測試cygwin編譯器的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM