2014-02-17 38 views
12

我嘗試了Clang(3.4版,通過Windows預建的二進制文件)來查看它是否可以替代GCC(4.8.1版,使用MinGW)。但是,我無法獲得一個簡單的程序來工作。當輸出endl時Clang段錯誤

#include <iostream> 

int main() 
{ 
    std::cout << std::endl; 
} 

鏘能夠編譯和鏈接程序,但運行它導致SIGSEGV信號和0xC0000005返回代碼。輸出一個字符串工作正常,但std::flush導致相同的結果,但允許流自動刷新本身沒問題。

調試程序只顯示一個包含__mingw_CRTStartup()(Clang使用libstdC++,因爲它沒有安裝libC++)和std::cout()的調用堆棧。什麼可能導致這種情況,以及如何解決這個問題?

編輯:當使用其他ostream操縱器如std::decstd::unitbuf時會發生同樣的事情。

+1

我猜你在標準庫版本中存在不匹配。你是如何安裝libstdC++以及如何編譯和鏈接你的可執行文件的? –

+0

@NateKohl我正在使用由mingw-get與GCC其餘部分一起安裝的libstdC++版本。至於編譯,我從命令行使用'clang ++ a.cpp'。 – Kyle

+4

可能會添加「return 0」或替換爲「void main()' –

回答

4

有一個LLVM 3.4 regarding a similar issue的bug。這個問題似乎是LLVM 3.4和MinGW 4.7+之間的ABI不兼容問題,導致i686指令被選中而不是選定的目標。

x64 Windows上可能的解決方案是使用MinGW64 build。這應該工作,但正確地獲得標準庫標題可能會很棘手。

推薦的解決方案是follow the steps here,調整目標和系統上的任何路徑並讓它編譯。

相關問題