c++: internal compiler error: Segmentation fault (program cc1plus) 解决

19 篇文章 3 订阅
7 篇文章 2 订阅

        在ubuntu中编译很多库,尤其是很大的一些中间件,常常会c++: internal compiler error: Segmentation fault (program cc1plus)这个错误,看到这个错误,很多人一搜索,大部分都是告诉你内存不足,很多人应该增加了虚拟内存后都没有解决
    由于我也踩到了这个坑,所以这里分享容易被大家忽略的一种可能解决办法。
    本人是在编译Cartographer时,TX1硬件核心,官方ubuntu 18.04系统,遇到这个问题,增加虚拟内存,甚至观察编译失败前的内存情况,基本都没有使用到虚拟内存也会失败,所以我人为并不是内存问题,应该是有其它没有注意到限制。对Cartographer有兴趣可以查看https://blog.csdn.net/cau_weiyuhu/article/details/128166362。
    通过不断搜索的努力,终于定位到了一个系统设置限制,编译的时候编译器需要打开很多关联源文件,以及很多头文件,这个时候其实缓冲中有很多这样的文件句柄,这个数量在系统内竟然有个限制数量,各个系统可能根据硬件性能不同有点限制。
    **系统对文件句柄打开数量的限制。**
 

#查看系统本身设置限制参数
 ulimit -a

 

        可以看到,我系统原始的打开文件个数(open files )为1024,静态缓冲(stack size )1024,其中有些是unlimited,为无限制。总之,这个命令会让你知道系统的一些资源限制。


问题是,如何改大:

sudo gedit /etc/security/limits.conf 

增加
nvidia hard nofile 65535
nvidia soft nofile 65535
root hard nofile 65535
root soft nofile 65535
ubuntu hard nofile 65535
ubuntu soft nofile 65535
修改
ubuntu hard stack 2024
ubuntu soft stack 2024
nvidia hard stack 2024
nvidia soft stack 2024

 

保存退出,后需要重启系统生效

#重启
sudo reboot

#重启后查看配置
ulimit -a

nvidia@nvidia-desktop:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 13930
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 2024
cpu time               (seconds, -t) unlimited
max user processes              (-u) 13930
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 重启后,你再编译刚才的程序,很大概率就不会再出现这个错误,希望对你解决问题有一定的帮助。

  • 16
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人虎哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值