ubuntu - 在 Ubuntu 中构建 llvm 源代码的 fatal error

标签 ubuntu clang llvm llvm-clang ninja

我正在尝试在 Ubuntu 16.04 上构建 LLVM 源代码。我已尝试使用来自 here 的源的 4.0.1、4.0.0 和 3.9.0 版本.我也尝试过使用来自 svn 的源代码,如几个教程中所示。

这是我得到的错误:

[1480/1747] Linking CXX executable bin/clang-3.9
FAILED: : && /usr/bin/c++   -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -Werror=date-time -std=c++11 -fno-common -Woverloaded-virtual -fno-strict-aliasing -g  -Wl,-allow-shlib-undefined   -Wl,--export-dynamic tools/clang/tools/driver/CMakeFiles/clang.dir/driver.cpp.o tools/clang/tools/driver/CMakeFiles/clang.dir/cc1_main.cpp.o tools/clang/tools/driver/CMakeFiles/clang.dir/cc1as_main.cpp.o  -o bin/clang-3.9  lib/libLLVMAArch64CodeGen.a lib/libLLVMAArch64AsmPrinter.a lib/libLLVMAArch64AsmParser.a lib/libLLVMAArch64Desc.a lib/libLLVMAArch64Info.a lib/libLLVMAArch64Disassembler.a lib/libLLVMAMDGPUCodeGen.a lib/libLLVMAMDGPUAsmPrinter.a lib/libLLVMAMDGPUAsmParser.a lib/libLLVMAMDGPUDesc.a lib/libLLVMAMDGPUInfo.a lib/libLLVMAMDGPUDisassembler.a lib/libLLVMARMCodeGen.a lib/libLLVMARMAsmPrinter.a lib/libLLVMARMAsmParser.a lib/libLLVMARMDesc.a lib/libLLVMARMInfo.a lib/libLLVMARMDisassembler.a lib/libLLVMBPFCodeGen.a lib/libLLVMBPFAsmPrinter.a lib/libLLVMBPFDesc.a lib/libLLVMBPFInfo.a lib/libLLVMHexagonCodeGen.a lib/libLLVMHexagonAsmParser.a lib/libLLVMHexagonDesc.a lib/libLLVMHexagonInfo.a lib/libLLVMHexagonDisassembler.a lib/libLLVMMipsCodeGen.a lib/libLLVMMipsAsmPrinter.a lib/libLLVMMipsAsmParser.a lib/libLLVMMipsDesc.a lib/libLLVMMipsInfo.a lib/libLLVMMipsDisassembler.a lib/libLLVMMSP430CodeGen.a lib/libLLVMMSP430AsmPrinter.a lib/libLLVMMSP430Desc.a lib/libLLVMMSP430Info.a lib/libLLVMNVPTXCodeGen.a lib/libLLVMNVPTXAsmPrinter.a lib/libLLVMNVPTXDesc.a lib/libLLVMNVPTXInfo.a lib/libLLVMPowerPCCodeGen.a lib/libLLVMPowerPCAsmPrinter.a lib/libLLVMPowerPCAsmParser.a lib/libLLVMPowerPCDesc.a lib/libLLVMPowerPCInfo.a lib/libLLVMPowerPCDisassembler.a lib/libLLVMSparcCodeGen.a lib/libLLVMSparcAsmPrinter.a lib/libLLVMSparcAsmParser.a lib/libLLVMSparcDesc.a lib/libLLVMSparcInfo.a lib/libLLVMSparcDisassembler.a lib/libLLVMSystemZCodeGen.a lib/libLLVMSystemZAsmPrinter.a lib/libLLVMSystemZAsmParser.a lib/libLLVMSystemZDesc.a lib/libLLVMSystemZInfo.a lib/libLLVMSystemZDisassembler.a lib/libLLVMX86CodeGen.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86AsmParser.a lib/libLLVMX86Desc.a lib/libLLVMX86Info.a lib/libLLVMX86Disassembler.a lib/libLLVMXCoreCodeGen.a lib/libLLVMXCoreAsmPrinter.a lib/libLLVMXCoreDesc.a lib/libLLVMXCoreInfo.a lib/libLLVMXCoreDisassembler.a lib/libLLVMAnalysis.a lib/libLLVMCodeGen.a lib/libLLVMCore.a lib/libLLVMipo.a lib/libLLVMInstCombine.a lib/libLLVMInstrumentation.a lib/libLLVMMC.a lib/libLLVMMCParser.a lib/libLLVMObjCARCOpts.a lib/libLLVMOption.a lib/libLLVMScalarOpts.a lib/libLLVMSupport.a lib/libLLVMTransformUtils.a lib/libLLVMVectorize.a -lpthread lib/libclangBasic.a lib/libclangCodeGen.a lib/libclangDriver.a lib/libclangFrontend.a lib/libclangFrontendTool.a lib/libPolly.a lib/libLLVMGlobalISel.a lib/libLLVMAArch64Desc.a lib/libLLVMAArch64AsmPrinter.a lib/libLLVMAArch64Info.a lib/libLLVMAArch64Utils.a lib/libLLVMAMDGPUDesc.a lib/libLLVMAMDGPUAsmPrinter.a lib/libLLVMAMDGPUInfo.a lib/libLLVMAMDGPUUtils.a lib/libLLVMARMDesc.a lib/libLLVMARMAsmPrinter.a lib/libLLVMARMInfo.a lib/libLLVMBPFAsmPrinter.a lib/libLLVMHexagonDesc.a lib/libLLVMHexagonInfo.a lib/libLLVMMipsAsmPrinter.a lib/libLLVMMipsInfo.a lib/libLLVMMSP430AsmPrinter.a lib/libLLVMNVPTXAsmPrinter.a lib/libLLVMPowerPCAsmPrinter.a lib/libLLVMPowerPCInfo.a lib/libLLVMSparcAsmPrinter.a lib/libLLVMSparcInfo.a lib/libLLVMSystemZDesc.a lib/libLLVMSystemZAsmPrinter.a lib/libLLVMSystemZInfo.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86Utils.a lib/libLLVMX86Info.a lib/libLLVMXCoreAsmPrinter.a lib/libLLVMAsmPrinter.a lib/libLLVMDebugInfoCodeView.a lib/libLLVMSelectionDAG.a lib/libLLVMCodeGen.a lib/libLLVMXCoreInfo.a lib/libLLVMMCDisassembler.a lib/libclangCodeGen.a lib/libLLVMipo.a lib/libLLVMVectorize.a lib/libLLVMInstrumentation.a lib/libLLVMObjCARCOpts.a lib/libLLVMScalarOpts.a lib/libLLVMInstCombine.a lib/libLLVMTarget.a lib/libLLVMBitWriter.a lib/libLLVMIRReader.a lib/libLLVMAsmParser.a lib/libLLVMLinker.a lib/libLLVMTransformUtils.a lib/libLLVMAnalysis.a lib/libLLVMCoverage.a lib/libLLVMObject.a lib/libclangRewriteFrontend.a lib/libclangARCMigrate.a lib/libclangStaticAnalyzerFrontend.a lib/libclangFrontend.a lib/libclangDriver.a lib/libLLVMOption.a lib/libLLVMProfileData.a lib/libclangParse.a lib/libLLVMMCParser.a lib/libclangSerialization.a lib/libLLVMBitReader.a lib/libclangSema.a lib/libclangEdit.a lib/libclangStaticAnalyzerCheckers.a lib/libclangStaticAnalyzerCore.a lib/libclangAnalysis.a lib/libclangAST.a lib/libclangRewrite.a lib/libclangLex.a lib/libclangBasic.a lib/libLLVMCore.a lib/libLLVMMC.a lib/libLLVMSupport.a -lrt -ldl -ltinfo -lpthread -lz -lm lib/libPollyISL.a -Wl,-rpath,"\$ORIGIN/../lib" && :
collect2: fatal error: ld terminated with signal 9 [Killed]

这是我尝试过的所有三个版本中反复出现的错误,因此我可能缺少某些步骤或其他一些问题。

这些是我的步骤:
  • 下载 llvm。
  • 下载 clang、lld 和 polly 并放入 llvm/tools。
  • 下载 compiler-rt、openmp、libcxx、libcxxabi 和 test-suite 并放入 llvm/projects
  • 运行cmake -G Ninja -DLLVM_ENABLE_ASSERTIONS=On ..
  • 运行ninja -j4

  • 我不知道如何消除此错误,并且对 LLVM 没有任何经验。请解释错误的原因。

    最佳答案

    这可能是由于链接步骤使用了太多内存造成的。在我的系统上启用了足够的交换空间,这使得系统实际上无法使用,因为交换空间位于 HDD 上。否则,Linux 内核将根据启发式终止某些进程,这可能涉及追踪最大的内存用户,这可以解释您的问题(ld 被终止)。
    如果您有大约 8 GB 的 RAM,则最多可以并行完成一个链接作业。默认情况下,llvm 是使用静态库构建的,这会导致链接占用过多的内存(由于调试信息而导致的 AFAIR)。然后通常忍者将并行链接几个大型可执行文件,您的系统将耗尽内存。
    尝试添加-DLLVM_PARALLEL_LINK_JOBS=1到您的 cmake 调用。
    还有一个构建共享库的选项可以缓解这个问题,我认为是 -DLLVM_LINK_LLVM_DYLIB=true .
    有关 CMake 选项的更多信息,请参阅:http://llvm.org/docs/CMake.html
    我认为使用黄金链接器也有帮助,因为它比默认链接器更有效。它通过将 -DLLVM_USE_LINKER=gold 传递给 cmake 来启用。
    最后,release build不包含debug信息,占用大量内存,所以build应该占用更少的内存。
    更新:
    我最近遇到了this article ,以 LLVM 为例,描述了如何使用 split dwarf 来加速编译。这通过将调试信息与被链接的目标文件分开来帮助链接器的内存消耗。
    对于 LLVM,split dwarf 通过传递选项 -DLLVM_USE_SPLIT_DWARF=ON 启用。到cmake。

    关于ubuntu - 在 Ubuntu 中构建 llvm 源代码的 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44807589/

    相关文章:

    python - 在 Django 模板中更改站点名称?

    react-native - 在 ubuntu 19.10 上设置 React Native Android 模拟器

    c - 为什么 switch(0) 不会产生警告而 if(0) 会产生警告?

    c++ - LLVM IR : Branch instruction with variable BasicBlock target?

    使用 sleep() 函数循环打印秒数

    linux - 如何配置 xorg.conf ubuntu

    c - Vim + YouCompleteMe + C : a minimal . ycm_extra_conf.py?

    iphone - 您使用 "potential leak"版本避免 "distant"警告的习惯用法?

    llvm - 具有整数结果的整数的 Julia/LLVM 高效除法

    带有数组参数的 LLVM IR 函数