在Ubuntu中构建llvm源代码时发生致命错误 [英] Fatal Error building the llvm source code in Ubuntu

查看:717
本文介绍了在Ubuntu中构建llvm源代码时发生致命错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to build LLVM source code on Ubuntu 16.04. I have tried versions 4.0.1, 4.0.0 and 3.9.0 with sources from here. I have also tried using the source from svn as shown in several tutorials.

这是我得到的错误:

[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]

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

This is a recurring error in all three versions I tried, so there's probably some step I am missing or some other problem too.

这些是我的步骤:

  1. 下载llvm.
  2. 下载clang,lld和polly并放入llvm/tools.
  3. 下载compile-rt,openmp,libcxx,libcxxabi和测试套件,并放入llvm/projects
  4. 运行cmake -G Ninja -DLLVM_ENABLE_ASSERTIONS=On ..
  5. 运行ninja -j4
  1. Download llvm.
  2. Download clang, lld and polly and put in llvm/tools.
  3. Download compiler-rt, openmp, libcxx, libcxxabi and test-suite and put in llvm/projects
  4. Run cmake -G Ninja -DLLVM_ENABLE_ASSERTIONS=On ..
  5. Run ninja -j4

我不知道如何消除此错误,并且对LLVM没有任何经验.请也说明错误的原因.

I don't know how to remove this error and dont have any experience with LLVM. Please explain the reason for the error too.

推荐答案

这可能是由于链接步骤使用了过多的内存造成的.我的系统上启用了足够的交换空间,这实际上使该系统无法使用.否则,Linux内核将根据一种启发式方法杀死某些进程,该启发式方法可能涉及到追随最大的内存用户,这可以解释您的问题(ld被杀死).

This may be caused by the linking step using too much memory. On my system there was enough swap space enabled which made the system practically unusable. Otherwise the Linux kernel will kill some processes according to a heuristic that probably involves going after the biggest memory user, which could explain your problem (ld is killed).

如果您有大约8 GB的RAM,则最多可以并行完成一个链接作业.默认情况下,llvm是使用静态库构建的,该静态库会导致链接占用过多的内存(由于调试信息而导致的AFAIR).然后,通常忍者会并行链接几个大型可执行文件,并且您的系统将耗尽内存.

If you have something around 8 GB of RAM it may be possible to finish with at most one link job in parallel. By default llvm is built with static libraries which causes the linking to take excessive amounts of memory (AFAIR due to debug info). Then usually several large executables will be linked in parallel by ninja and your system will run out of memory.

尝试将-DLLVM_PARALLEL_LINK_JOBS=1添加到您的cmake调用中.

Try to add -DLLVM_PARALLEL_LINK_JOBS=1 to your cmake invocation.

还有一个构建共享库的选项,可以缓解此问题,我认为这是-DLLVM_LINK_LLVM_DYLIB=true.

There is also an option to build shared libraries which should alleviate this problem, I think it is -DLLVM_LINK_LLVM_DYLIB=true.

有关CMake选项的更多信息,请参见: http://llvm.org/docs/CMake.html

For more info on CMake options see: http://llvm.org/docs/CMake.html

我认为使用黄金链接器也有帮助,因为它比默认链接器效率更高.通过将-DLLVM_USE_LINKER = gold传递给cmake来启用它.

I think that using the gold linker also helps because it is somewhat more efficient than the default linker. It is enabled by passing -DLLVM_USE_LINKER=gold to cmake.

最后,发行版本不包含调试信息,因为调试信息会占用大量内存,因此构建所需的内存应该更少.

Finally, the release build does not contain the debug info, which takes up a lot of the memory, so it should take less memory to build.

更新: 我最近碰到了这篇文章,它描述了以LLVM为例,如何使用分割小矮人来加快编译速度.通过将调试信息与要链接的目标文件分开,这有助于链接器的内存消耗. 对于LLVM,通过将选项-DLLVM_USE_SPLIT_DWARF=ON传递给cmake来启用矮化.

Update: I recently came across this article, that describes how to use split dwarf to speed up compiles with LLVM as an example. This helps the memory consumption of the linker by separating the debug information from the object files being linked. For LLVM split dwarf is enabled by passing the option -DLLVM_USE_SPLIT_DWARF=ON to cmake.

这篇关于在Ubuntu中构建llvm源代码时发生致命错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆