我正在使用-j标志运行大型GNU Make文件。在某一点上,Make进程溢出所有RAM并因“分段错误”而崩溃。没有-j标志,该过程完成sucessufly。如何知道什么是GNU Make开始吃内存时做的事情?调试标志(-d)没有帮助解决这个问题。
答案 0 :(得分:0)
如果内存不足,则不应将分段错误视为错误消息。如果某些make进程占用了大量内存,那么就像崩溃一样,它可能是堆栈溢出。
makefile是否有可能具有某种递归依赖性?
答案 1 :(得分:0)
不是GNU make就是在吃记忆。它正在运行各种目标中的命令,这些目标是并行分叉的,它们单独占用内存。这可能就是为什么只有在运行多个并行进程时才会出现问题的原因。你试过-j2
但也失败了吧?
如果您使用remake,当您的进程失败时,您将看到失败的make命令以及调用它的目标堆栈。
答案 2 :(得分:0)
您是否可能在gmake -j
没有任何争论的情况下运行-j
?在这种情况下,gmake
并行运行尽可能多的进程(可能是数百或数千)。这很可能导致gmake
或分叉进程中的段错误。如果这是问题,请使用例如
gmake -j 4
对该数字的粗略估计是CPU核心数量的两倍。