为什么我在构建CLang时链接器会终止?

51

我正在使用 openSUSE,具体是在mono的网站上点击vmware变体。

我收到了这个错误。有没有人知道我该如何修复它?

make[4]: Entering directory `/home/rupert/Desktop/llvm/tools/clang/tools/driver'
llvm[4]: Linking Debug+Asserts executable clang
collect2: ld terminated with signal 9 [Killed]
make[4]: *** [/home/rupert/Desktop/llvm/Debug+Asserts/bin/clang] Error 1

完整的文本可以在 这里 找到。

5个回答

51

你的虚拟机没有足够的内存执行链接阶段。链接是编译期间最耗费内存的部分,因为它将所有的目标代码组合在一起,并作为一个整体进行操作。

如果您可以为虚拟机分配更多的RAM,则这样做。或者,您可以增加交换空间的容量。我对虚拟机不是很熟悉,但我想象您设置的虚拟硬盘将有一个交换分区。如果您可以将其扩大或分配第二个交换分区,那将有所帮助。

尽管如此,针对您的编译,增加RAM容量是最简单的方法。


1
如果你使用的是CentOS或相关发行版,你可以按照这个教程来添加交换文件。这对我解决了问题。 - sffc

42

我也遇到了同样的问题,并通过以下步骤解决了这个问题(仅仅是内存问题)-

  1. Checks current swap space by running free command (It must be around 10GB.).
  2. Checks the swap partition

    sudo fdisk -l
    /dev/hda8       none            swap    sw              0       0
    
  3. Make swap space and enable it.

    sudo swapoff -a
    sudo /sbin/mkswap /dev/hda8
    sudo swapon -a
    

如果您的交换磁盘大小不足,您可以创建交换文件并使用它。

  1. Create swap file.

    sudo fallocate -l 10g /mnt/10GB.swap
    sudo chmod 600 /mnt/10GB.swap
    

    OR

    sudo dd if=/dev/zero of=/mnt/10GB.swap bs=1024 count=10485760
    sudo chmod 600 /mnt/10GB.swap
    
  2. Mount swap file.

    sudo mkswap /mnt/10GB.swap
    
  3. Enable swap file.

    sudo swapon /mnt/10GB.swap
    

8
展示如何创建交换文件非常有用。 - simotek
值得一提的是,为了在重新启动后保留这些更改,您必须将“/mnt/10GB.swap none swap sw 0 0”行添加到“/etc/fstab”中。 - Alex Lipov
1
我笔记本电脑有32GiB内存,但仍然失败了。Deepa的解决方案奏效了。通过限制同时运行的作业数量,内存使用量下降了相同的因素。编译完成时使用-j 9,链接崩溃时只需使用-j 1即可成功 :) - Mr. Developerdude

7

我尝试使用 make -j1,它可以工作!但是构建时间很长。


1
你可以使用“-j 9”直到它死亡,然后继续使用“-j 1”。 - Mr. Developerdude

3

我在VirtualBox系统上构建时遇到了同样的问题。值得一提的是,我是在一台装有XP和2GB RAM的笔记本电脑上进行构建的。我不得不将虚拟RAM增加到1462MB才能成功构建。此外,请注意,8GB的推荐磁盘大小不足以在Ubuntu下构建和安装LLVM和Clang。我建议至少使用16GB。


在没有配置'--enable-optimized'的情况下,我发现2G的内存不够用。我不得不将虚拟机的内存增加到3G才能构建clang。 - Peeter Joot

1
我建议在这种情况下使用-l (--max-load)选项,而不是限制-j。可能有帮助。答案

这个问题是实际存在的,当其他答案无法帮助时,这个答案会有所帮助。我今天遇到了类似的问题,但在现有的答案中找不到解决方案。 - KernelPanic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接