【问题标题】:GCC Memory Overload when Linking链接时 GCC 内存过载
【发布时间】:2018-07-07 13:59:37
【问题描述】:

免责声明:请不要嘲笑我的机器。这是我目前拥有和负担得起的全部。

Legacy Bios Dell Mobo
Athlon II X4 640 Processor
4Gb DDR3 Ram
500Gb HHD

世界你好!在过去的一周半里,我一直在尝试使用带有 gcc 的 cmake/ninja 或来自基本存储库的默认版本的 clang 来编译 llvm/clang-tools。

每次我尝试时,他们的编译器都会崩溃,然后我又顽固地重新开始。起初我一直在重新分区并重新安装 Ubuntu,直到我添加了 12Gb 的交换分区,但我的系统不稳定,编译器无法完成工作。

我就停在那里,并决定我应该在操作系统上尽可能轻松,然后再试一次(认为这样可以使系统更稳定,减少臃肿)。我安装了带有最小构建和动态交换文件的 Arch Linux。没有放弃的想法,我继续编译。现在我仍然遇到同样的内存过载,但操作系统能够管理它并退出进程,而无需我进行硬重启。我认为这是朝着正确方向迈出的一步。

来自 Visual Studio,我是编译器标志的处女。

这是我的构建:

默认为 ccache。

$ cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../llvm
$ ln -s $PWD/compile_commands.json ../llvm
$ ninja -j2 check-all

单线程“$ make .....”仍然存在内存过载。

除了花费 20 美元来填充 ram 的最后 2 个插槽(我的妻子确实允许我为我的生日做这件事)之外,像我这样的穷人还能做些什么来获得这个有价值的工具并返回编译我自己的 C++ 代码?

【问题讨论】:

  • 为什么需要自己编译Clang?鉴于您的资源有限,使用其他人制作的构建是否有意义?
  • 构建重要的编译器和其他开发人员的工具 - 以及 llvm/clang 或 gcc 都符合非平凡的条件 - 往往会消耗大量内存。
  • 1) 添加更多交换。 2) 使用-j1 构建以不并行运行多个编译器。 3) 等待(很长一段时间)。
  • 我记得llvm 的默认构建类型是debug。这可能需要在release 构建上很多 额外的内存/交换。如果是这种情况,请尝试使用 cmake 将构建类型设置为 release
  • 您还可以通过仅针对您的 CPU 架构(如果您不想要交叉编译器)而不是所有受支持的架构来减少编译时间。以-DLLVM_TARGETS_TO_BUILD="X86" 为例。

标签: c++ linux gcc cmake clang


【解决方案1】:

如果您真的需要最新最好的(是吗?),您可以使用预先打包的 clang/llvm 版本。看看这里的 Arch:https://aur.archlinux.org/packages/clang-svn/

【讨论】:

  • 非常酷。我将不得不更新我的机器。我最终将预编译的二进制文件从 LLVM 的网站上删除。这对于拱形机器上的 -v 6.0.0 很有用。真的很喜欢AUR。从 windows 到 linux 的这一转变确实让我的头脑爆炸了,但它似乎变得更好了。在使用 VS 的 Windows 机器上,只需单击或按键即可构建项目。决定使用文本编辑器而不是 ide 是我做出的最佳决定之一,因为它教会了我更多关于构建过程的知识。只是想补充一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2012-06-20
  • 2011-07-05
  • 1970-01-01
  • 2023-01-09
相关资源
最近更新 更多