2017-06-28 12 views
1

Ubuntu 16.04でLLVMソースコードを作成しようとしています。私はhereからのソースでバージョン4.0.1,4.0.0、および3.9.0を試しました。私はまた、いくつかのチュートリアルで示されているようにsvnのソースを使ってみました。ここでUbuntuでllvmソースコードを構築すると致命的なエラーが発生する

は私が取得エラーです:

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

は、これは私が試したすべての3つのバージョンでは、定期的な誤りであるので、私が行方不明ですいくつかのステップまたは他のいくつかの問題があまりにもおそらくあります。

これらは私の手順は次のとおりです。

  1. ダウンロードLLVM。
  2. clang、lld、pollyをダウンロードし、llvm/toolsに入れます。
  3. libcxxabiとテスト・スイートとLLVMに入れるダウンロードコンパイラ-RT、OpenMPの、libcxx、/私はこのエラーを削除する方法がわからない
  4. 実行cmake -G Ninja -DLLVM_ENABLE_ASSERTIONS=On ..
  5. 実行ninja -j4

を突出し、 LLVMの経験はありません。エラーの理由も説明してください。

答えて

1

これは、あまりにも多くのメモリを使用するリンク手順によって発生する可能性があります。私のシステムでは、スワップスペースが有効になっていて、システムを実際に使用できなくしました。さもなければ、Linuxカーネルは、あなたの問題(ldが死亡している)を説明できる最も大きなメモリーユーザーの後におそらくgiongを含む経験則に従っていくつかのプロセスをkillします。

約8 GBのRAMがある場合、最大で1つのリンクジョブを並列に処理することができます。デフォルトでは、llvmは静的ライブラリを使用して構築されているため、リンキングには過剰なメモリ(デバッグ情報によるAFAIR)が必要です。通常、いくつかの大きな実行ファイルが忍者によって並列にリンクされ、システムのメモリが不足します。

cmake呼び出しに-DLLVM_PARALLEL_LINK_JOBS = 1を追加してみてください。

また、この問題を緩和する共有ライブラリを構築するオプションもあります.DLLVM_LINK_LLVM_DYLIB = trueだと思います。 cmakeのオプションの詳細については

は、以下を参照してください。http://llvm.org/docs/CMake.html

が、私はそれがデフォルトのリンカよりもいくらか効率的であるため、金リンカーを使用しても役立つと思います。これは、-DLLVM_USE_LINKER = goldをcmakeに渡すことで有効になります。

最後に、リリースビルドにはデバッグ情報が含まれていないため、多くのメモリを占有するため、ビルドに必要なメモリが少なくて済みます。

+0

オンラインで詳細を確認したところ、スワップスペースを増やすと役立つはずです。私は5.4Gのスワップ空間と8GのRAMを持っています。それで十分ですか? –

+0

私はラップトップで最後に試してみましたが、8GBのRAMで構築できましたが、ジョブを1に制限し、金のリンカーを使用していました。当時私はリンクジョブの数を選択的に設定することについて知らなかった。これは、コンパイルが並行して行われるため、より高速である。 – PaulR

+0

LLVMを構築している間の私の交換経験は、私のシステムが完全に使えなくなったことでした。私は数時間後にそれをオフにしなければならなかった。ですから、私はこのためにスワップ空間に頼ることはお勧めしません。ビルドが完了したらビルドには数日かかるかもしれません。 – PaulR

関連する問題