在 Linux 上的 C++ 源文件上运行“gcc”会给出“cc1plus: out of memory allocating ...”错误消息
Posted
技术标签:
【中文标题】在 Linux 上的 C++ 源文件上运行“gcc”会给出“cc1plus: out of memory allocating ...”错误消息【英文标题】:Running 'gcc' on C++ source file on Linux gives "cc1plus: out of memory allocating ..." error message 【发布时间】:2014-12-21 09:51:29 【问题描述】:在 Ubuntu 上使用“gcc”编译 C++ 源文件时遇到了一个令人费解的问题。解决了问题后,我想在这里发布它,以免其他人为解决它而头疼。
为了这份报告,我们有一个最简单的 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
我确认我正在为正确的 bittage(即 32 位)进行编译。我做错了什么?
【问题讨论】:
【参考方案1】:事实证明,我已将 C++ 源文件保存为 UTF-16 Unicode 编码文件,并在文件开头包含前导 Unicode 字节顺序标记 (BOM) 字节。该文件在 Windows 系统上保存为 UTF-16,提交到版本控制系统,然后签出到 Linux。 gcc 确实支持编码为 UTF-8 的 Unicode,但不支持编码为 UTF-16 的 Unicode。
解决方案是将源文件转换回标准的非 Unicode 编码。
【讨论】:
嗯。你会认为你会因为编译器无法理解的字符而出现语法错误。 我会将此报告为一个错误(假设它仍然在相当新的系统上执行此操作)。 [我还想在你的 Ubuntu 机器上安装一个编辑器,比如 xemacs(或者如果你喜欢终端模式,也可以使用 emacs)或 eclipse!] @Michael 事实上,正确的语法错误会为我节省大量时间。没有什么比认为你通过混合不同的比特(例如,32 位或 64 位)而把事情搞砸了,但找不到任何解释的乐趣。由于我是使用 CMake 构建的,因此还有另一个需要担心的人。 是的,但它可能会失败并显示比尝试分配大量内存更用户友好的消息! ;) 我不小心做了一个g++ file.cpp -o file.cpp
而不是g++ file.cpp -o file
,之后每次我尝试编译时都会收到这个警告。相同的内存计数也是如此。这是在 Cygwin 上的。【参考方案2】:
我在用MAKEFILE
编译C++
程序时遇到了同样的问题。
我找到了一个简单的方法来解决这个问题,它是从以前的编译中删除现有的二进制文件。
我无法确定问题的根源,但这对我有用。
【讨论】:
以上是关于在 Linux 上的 C++ 源文件上运行“gcc”会给出“cc1plus: out of memory allocating ...”错误消息的主要内容,如果未能解决你的问题,请参考以下文章
gcc环境配置Linux/UnixWindowsMac上如何配置C++环境?
我能够在 Windows(Visual C++)中读取 bin 文件,但不能在 linux(GCC)上读取 [关闭]