[llvm-dev] difference with autotools, cmake and ninja building methods

David Chisnall via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 1 02:17:47 PST 2015

On 1 Dec 2015, at 10:03, 慕冬亮 via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> collect2: fatal error: ld terminated with signal 9 [Killed]
> compilation terminated.
> [2706/2983] Linking CXX executable bin/clang-check
> ninja: build stopped: subcommand failed.

This looks like the linker is running out of memory.  This is a huge link job and BFD linker will consume at least one GB of RAM, possibly far more depending on your build config.  If you’re on a 32-bit platform, then you won’t be able to do this with a debug build.

The big speedup if you’re using BFD ld is to enable shared library support.  This is a particularly big win if you’re doing incremental builds a lot, because the extra startup time overhead is likely to be far less than the 4-5 minutes of extra time spent linking, even on a fast machine.

If you do want to do static linking, then your best bet is to do ninja -k 10, which should let it skip over the link jobs that fail, but keep compiling the sources, then ninja -j1, which will make it do the remaining steps one at a time.  In general, the defaults for ninja work well for LLVM/Clang if you have at least one GB of RAM per core.

On a modern laptop, you should be able to do a clean build in 5-10 minutes, but BFD ld can be a bottleneck.  It would be nice if CMake had an option to stick -fuse-ld=gold (or -fuse-ld=lld) in all of the correct places, but when I’ve tried poking the link flags to add this myself I’ve found weird linking errors that I haven’t had time to debug.


More information about the llvm-dev mailing list