我正在尝试使用Arch Linux在ARMv7主板上构建我的软件。 我还为我的软件构建了PGO版本。第一个构建编译没有错误,但第二个构建崩溃比我使用我的配置文件优化目录进行构建。 我在这里收到此错误消息
cc1: out of memory allocating 66574076 bytes after a total of 148316160 bytes
目前我有2GB内存。 我试图尽量设置我的交换文件(20G),而且我的ulimit也是无限制的
$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14879
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14879
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
但它仍然没有编译,我不知道我还可以做什么来编译我的程序。
答案 0 :(得分:2)
在我的构建过程中,由于存在,
,这种情况多次发生在我身上我在两种情况下都得到了相同的“无法分配内存”错误。只需检查top
命令的内存使用情况,看看是否使用了所有RAM / Swap内存。
还使用df
命令检查磁盘使用情况。例如df -kh
以查看您的编译驱动器是否已满
说到内存,如果是32位系统,最大内存将被限制为2 ^ 32~4GB。见3GB barrier。增加交换大小无济于事。
如果它是64位系统,则内存限制很高,因此编译器/ limker尝试访问的任何文件/文件夹中的其他可能性可能是权限问题。
答案 1 :(得分:0)
我在Ubuntu
中遇到了类似的问题,除了该问题是在用C++
编译MAKEFILE
程序时发生的。
根据我的搜索,我意识到问题可能出在使用32位系统或虚拟机。
我找到了解决此问题的简便方法,它是从上一次编译中删除现有的二进制文件。
对我有用。