2014-12-21 39 views
9

在Ubuntu上編譯使用'gcc'的C++源文件時遇到了一個令人費解的問題。解決了這個問題之後,我想在這裏發佈它,以幫助其他人解決問題。在Linux上的C++源文件上運行'gcc'會導致「cc1plus:內存不足......」錯誤消息

在本報告的目的,我們有一個最簡單的C++的 「Hello,World」 程序,存儲在main.cpp中:

#include <stdio.h> 

int main (int argc, char *argv[]) 
{ 
    return 0; 
} 

當我運行命令:

gcc main.cpp 

我得到錯誤信息:

cc1plus: out of memory allocating 1677721600 bytes after a total of 475136 bytes 

我驗證了我正在編譯正確的比特(即32位)。我做錯了什麼?

回答

9

事實證明,我已經將C++源文件保存爲UTF-16 Unicode編碼文件,並在文件的開始部分添加了領先的Unicode字節順序標記(BOM)字節。該文件在Windows系統上保存爲UTF-16格式,提交給版本控制系統,然後簽出至Linux。 gcc支持Unicode編碼爲UTF-8,但不支持Unicode編碼爲UTF-16。

解決方案是將源文件轉換回標準的非Unicode編碼。

+0

呵呵。你會認爲你會因爲編譯器無法理解的字符而出現語法錯誤。 –

+3

我會將此報告爲一個錯誤(假設它仍然在合理的最新系統上執行此操作)。 [我也會研究讓一個編輯器,比如xemacs(或者emacs,如果你更喜歡終端模式)或者eclipse到你的Ubuntu機器!] –

+0

@Michael事實上,恰當的語法錯誤會爲我節省很多時間。沒有什麼符合您認爲通過混合不同比特(例如32位或64位)而混淆不清的樂趣,但沒有找到任何解釋。由於我正在使用CMake進行構建,因此還有另一個忌憚的人擔心。 –

相關問題