在 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)上读取 [关闭]

linux下使用gcc编译运行C程序

如何通过 Makefile 将 cap_net_raw 功能添加到 Linux 上的 c++ 可执行文件

linux怎么运行c程序

MacOS 上的 gcc:奇怪的线程错误