Linux swap 空间不足导致编译Clang失败
环境介绍
- 联想笔记本电脑
- i5处理器
- 128G硬盘空间
- 8G内存
- Linux Mint 18.2
目标
Windows下编译Clang已经成功,为考虑代码兼容性,在Linux也需要编译Clang及libclang。
执行编译
按照官方Get Start所写分别 checkout 了 llvm和clang两个项目,具体参考Getting Started: Building and Running Clang.
a、用cmake创建项目
一切顺利
b、执行make
遭遇错误:
ERROR: make collect2: ld terminated with signal 9
根据上面的错误信息,得知是Linux swap空间不足导致编译失败。在编译时调用如下命令也可以观察到8G内存被爆:
$free -m
//显示memory和swap的使用情况
由于所有硬盘空间已经被分区并使用,所以使用物理分区做swap区会比较麻烦,因此使用Linux提供swap相关命令
//进入用户目录
cd ~
//在用户目录下创建swapfile文件
dd if=/dev/zero of=swapfile count=4096 bs=1024k
dd if=/dev/zero of=/tmp/mem.swap bs=1M count=4096
//if 表示输入文件 /dev/zero表示一个空文件,即以null字符写入文件中。
//of 表示输出文件
//bs 每个块多少个字节,可以带单位
//count 表示多少个块
//这样就创建4G的一个空文件
//当然根据bs指定的大小不同,我们也可以通过下面的文件增加:
dd if=/dev/zero of=/tmp/mem.swap bs=1M count=4096 (增加4G)
//或
dd if=/dev/zero of=swapfile bs=1024 count=1048576 (增加1G)
//挂载swap分区文件
sudo swapon swapfile
//关闭swap设备或文件
swapoff swapfile
c、make install
只要硬盘空间够,这里不会出现问题。
总结
以前总觉得Linux下 8G内存不需要再开swap分区,但遇到Clang之后发现,时代在进步,8G已经快成为历史。
另外,编译Clang对于硬盘空间的占用真是疯狂,其build目录占用了近47G,由此推断,128G的工作空间也够呛了。