docker - 在 Docker 中使用 g++ 时出现“内部编译器错误”
问题描述
我正在尝试在 Makefile 构建系统下使用 g++ 编译我的 C++ 项目。但是,在编译过程中,随机出现以下错误信息:
random source file A.cpp:xxx:xx: internal compiler error: Segmentation fault
random location
^~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
如果我重试该make
命令,A.cpp
错误就会消失,但它可能会重新出现在 中的另一个随机位置B.cpp
,因此我需要重复该过程直到编译完成。
我已经用谷歌搜索了这个问题,似乎(根据这个GitHub 线程)OOM 是发生这种情况的原因。但是,我在docker-compose中尝试了以下解决方案,但它们都不能保证一次性编译成功:
- 单线程
make
构建(虽然理想情况下我想做make -j $(nproc)
)。 - 设置内存大小和内存交换大小:
mem_limit: 8g
,memswap_limit: 100g
- 设置
shm_size
:shm_size: 8g
我确信 8G 内存足以编译项目,因为我可以在不使用 docker 的情况下本地完成它,但是引入 docker 会导致上述错误随机发生。我可以知道我应该如何解决这个问题吗?
PS 我正在使用 docker 19.03.8 和 g++ 7.5.0
解决方案
这可能是共享内存限制?您可以从默认的 64M 增加共享内存大小,例如:
docker run -it --shm-size=512m
或使用 docker-compose:
shm_size: 512M
看这里
推荐阅读
- javascript - 在 Reactjs 中滚动到底部时加载更多
- python - Mongoengine DeprecationWarning:不推荐使用插入
- docker - 如何调整 SetReadBuffer 大小
- swift - 如何在当前类型的 Swift 中使用泛型函数
- tensorflow - Tensorflow 上的 CPU 使用率高
- jboss - JBoss LiveReload 被弃用的原因是什么,还有其他选择吗?
- c# - mqtt 客户端总是不接收消息
- vue.js - 使用带有 weex 的 vue 路由器
- bash - 在 shell 脚本中检测 GTK3 的可用性
- azure - 不区分大小写的 Azure 搜索