编译报错 internal compiler error: Segmentation fault 解决方法

问题描述

  • 最近在使用虚拟机 ubuntu 20.04 编译 musl gcc 工具链时,遇到一个奇怪的问题,编译过程中异常退出,清理了多次重新编译,发现编译报错提示的信息是 internal compiler error: Segmentation fault

在这里插入图片描述

解决方法

  • 初步重启 ubuntu 可以解决,不过做了一些操作后,再编译,就发现又不行了,这到底是存在问题

  • 经过搜索 Segmentation fault 解决方法,自己初步总结了一下:

  • 问题的根本原因除了内存不足(free 查看),主要的原因是 open file 文件描述符 限制问题,因为在编译大型软件,尤其是 gcc 工具链时,多线程操作需要大量的文件的打开,也就是 ubuntu 默认的文件打开的个数受限制了

  • 可以通过 ulimit -a 查看,如 open files (-n) 1024,这里是 1024,把这个改大即可正常编译通过

$ 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) 31292
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31292
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
  • 临时更改方法: ulimit -n 65535

如何让 ulimit -n 65535 一直生效

  • 发现当前的 shell 改了 ulimit 限制后,其他的 shell 下,依旧不生效,重启后,当前全部失效

  • 可以更改 /etc/security/limits.conf 来解决,更改完后,需要重启 ubuntu

  • sudo vim /etc/security/limits.conf ,增加或者修改

*       soft    nofile          65536      # open files  (-n)
*       hard    nofile          65536
  • 注意修改 /etc/security/limits.conf 后无法立即生效,只能重启系统(而不是 shell)

  • 建议先通过 ulimit -n 65535 临时修改,解决编译问题,然后再修改 /etc/security/limits.conf,这样下次重启系统即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在您提到的报错信息中,"internal compiler error: Segmentation fault"表示编译器内部发生了一个分段错误。分段错误是一种指针访超出所分配内存范围的错误。这通常是由于编译器或操作系统的错误引起的,并且很少由代码本身引起。 解决此问题的步骤如下: 1. 首先,尝试将您的代码编译到另一个目标,例如不同的操作系统或编译器。这有助于确定问题是由特定环境引起的还是您的代码本身的问题。 2. 检查您的代码是否存在任何潜在的指针错误或内存越界访问。这些问题可能会导致编译器错误。使用静态代码分析工具,例如PMD或FindBugs,可以帮助您检测此类错误。 3. 更新您正在使用的编译器版本。某些编译器错误可能已经在较新的版本中修复。确保您使用的是最新版本的编译器。 4. 如果您确定问题是由编译器或操作系统引起的,并且您无法通过更换目标环境或更新编译器来解决问题,您可以尝试联系编译器或操作系统的开发者,并向他们报告此问题。他们可能能够提供更具体的解决方案或修补程序。 希望这些步骤能够帮助您解决"internal compiler error: Segmentation fault"报错问题。如果问题仍然存在,请尝试在相关开发者社区或论坛上寻求进一步的帮助。<span class="em">1</span> #### 引用[.reference_title] - *1* [IntelliJ IDEA报错Error:java: Compilation failed: internal java compiler error解决办法](https://download.csdn.net/download/weixin_38711333/12755589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值