C++编译代码“virtual memory exhausted: Cannot allocate memory”

1.用free -h 查看虚拟内存Swap使用情况,发现内存已满;

2.用swapon --show 查看swap类型是文件还是分区 ,结果:/swapfile;

3.对swap把2G扩充到4G:

   1.关闭现有的Swap分区

sudo swapoff -a
  1.   调整Swap分区大小

    • 如果是Swap文件,可以直接调整其大小。例如,将Swap文件从2GB增加到4GB:

      bash复制

      sudo fallocate -l 4G /swapfile
      sudo chmod 600 /swapfile
      sudo mkswap /swapfile
      sudo swapon /swapfile
    • 如果是Swap分区,可能需要重新分区并设置Swap,这通常需要重新启动系统。

  2. 重新启用Swap

    bash复制

    sudo swapon -a
  3. 验证Swap大小

    bash复制

    free -h
从你提供的错误信息来看,Dante Server 安装过程中出现了两个主要问题: 1. **编译警告**: - `Rcompat.c` 文件中的 `Rwritev` 和 `Rsend` 函数存在 `const` 限定符被丢弃的警告。这通常是因为将 `const` 修饰的指针赋值给了非 `const` 指针。 - 示例警告: ``` Rcompat.c:94:19: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] msg.msg_iov = iov; ^ ``` 2. **内存分配失败**: - 编译过程中出现了 `virtual memory exhausted: Cannot allocate memory` 错误,表明系统内存不足,导致编译失败。 - 多个编译任务(如 `issetugid.lo`、`Rgethostbyname.lo` 等)因内存不足而失败。 3. **安装失败**: - 最终安装失败,提示 `Dante Server Install Failed!`。 ### 解决方法: 1. **修复 `const` 警告**: - 修改 `Rcompat.c` 文件,确保 `const` 指针的正确使用。例如: ```c const struct iovec *iov_const = iov; msg.msg_iov = (struct iovec *)iov_const; // 显式类型转换(不推荐,但可抑制警告) ``` - 更好的方式是重新设计代码,避免丢弃 `const` 限定符。 2. **解决内存不足问题**: - 增加系统的交换空间(swap): ```bash sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile ``` - 或者减少并行编译任务(如 `make -j1`)。 3. **检查系统资源**: - 确保系统有足够的内存和磁盘空间: ```bash free -h df -h ``` 4. **重新编译和安装**: - 清理之前的编译结果并重新编译: ```bash make clean make sudo make install ``` ### 其他问题: - `ls: cannot access /sbin/init/*systemd*: Not a directory` 表明脚本尝试访问不存在的路径,可能是配置错误或路径拼写问题。 ### 总结: 主要问题是内存不足导致编译失败,以及代码中的 `const` 警告。建议优先解决内存问题,然后修复代码中的 `const` 使用问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值