collect2: ld terminated with signal 9
同事在VirtualBox虚拟机中编译链接程序,最后链接过程中,报出标题这样的错误信息。
没有见过这样的错误信息,在网上查了下。大概能够确定是虚拟内存空间不足导致此链接错误,是内存不够用了,增加内存应该可以解决问题。这里通过新建swap分区解决。
管理swap分区§
# 查看系统空闲和使用中的内存,单位MB,其中包含swap内存
$ free -m
# 显式设备的swap使用统计
$ swapon -s
# 查看swap信息
$ cat /proc/swaps
两种解决方案
-
增加swap文件
# 创建4GB的交换文件 $ sudo dd if=/dev/zero of=/tmp/mem.swap bs=1M count=4096 # 也可以这样写 $ sudo dd if=/dev/zero of=/tmp/mem.swap bs=1024 count=4096 # 转换格式 $ sudo mkswap /tmp/mem.swap # 挂载swap分区 $ sudo swapon /tmp/mem.swap # 卸载swap分区 $ sudo swapoff /tmp/mem.swap # 这种方法在重启后swap文件大小会改变回去 # 需要在/etc/fstab文件中添加对应的配置信息,以持久化变更 /tmp/mem.swap swap swap defaults 0 0
-
通过fdisk增加swap分区
# 新增分区,需要磁盘有剩余空间 $ sudo fdisk /dev/sda Command (m for help): n # 格式化swap分区并挂载 $ sudo mkswap /dev/sda4 $ sudo swapon /dev/swap # 与swap文件设置相同,在/etc/fstab文件中添加对应的配置信息 /dev/sda4 swap swap defaults 0 0
问题原因§
查看该虚拟机分配的内存有4G。
不过此程序之前都可以编译链接通过。
查看机器上内存占用情况,CLion的java进程占用超过1G多。
同事也是最近才开始用CLion,因此以往编译链接没有出现过问题。