2017-06-28 7 views
1

J'essaye de construire le code source LLVM sur Ubuntu 16.04. J'ai essayé les versions 4.0.1, 4.0.0 et 3.9.0 avec des sources de here. J'ai également essayé d'utiliser la source de svn comme indiqué dans plusieurs tutoriels.Erreur irrécupérable de construction du code source llvm dans Ubuntu

Voici l'erreur que je reçois:

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

Ceci est une erreur récurrente dans les trois versions que j'ai, donc il y a probablement une étape que je suis absent ou un autre problème aussi.

Ce sont mes étapes:

  1. Télécharger llvm.
  2. Télécharger clang, lld et polly et mettre dans llvm/tools.
  3. Télécharger le compilateur-rt, OpenMP, libcxx, libcxxabi et test de suite et mis en LLVM/projets
  4. Run cmake -G Ninja -DLLVM_ENABLE_ASSERTIONS=On ..
  5. Run ninja -j4

Je ne sais pas comment supprimer cette erreur et N'ayez aucune expérience avec LLVM. S'il vous plaît expliquer la raison de l'erreur aussi.

Répondre

1

Ceci peut être causé par l'étape de liaison utilisant trop de mémoire. Sur mon système, il y avait assez d'espace de permutation qui rendait le système pratiquement inutilisable. Sinon, le noyau Linux va tuer certains processus selon une heuristique qui implique probablement giong après le plus gros utilisateur de mémoire, ce qui pourrait expliquer votre problème (ld est tué).

Si vous avez quelque chose autour de 8 Go de RAM, il peut être possible de terminer avec au plus un travail de liaison en parallèle. Par défaut, llvm est construit avec des librairies statiques qui provoquent un encombrement excessif de la mémoire (AFAIR dû aux informations de débogage). Alors généralement plusieurs grands exécutables seront liés en parallèle par ninja et votre système n'aura plus de mémoire. Essayez d'ajouter -DLLVM_PARALLEL_LINK_JOBS = 1 à votre invocation de cmake.

Il existe également une option pour créer des bibliothèques partagées qui devrait résoudre ce problème, je pense que c'est -DLLVM_LINK_LLVM_DYLIB = true.

Pour plus d'informations sur les options CMake voir: http://llvm.org/docs/CMake.html

Je pense que l'utilisation de l'éditeur de liens d'or aide aussi parce qu'il est un peu plus efficace que l'éditeur de liens par défaut. Il est activé en transmettant -DLLVM_USE_LINKER = gold à cmake.

Enfin, la version release ne contient pas les informations de débogage, qui occupent une grande partie de la mémoire, donc il faudrait moins de mémoire à construire.

+0

J'ai vérifié en ligne pour plus d'informations, et les gens disent que créer plus d'espace d'échange devrait aider aussi. J'ai 5.4G d'espace de swap et 8G RAM. Est-ce suffisant? –

+0

La dernière fois que j'ai essayé sur mon ordinateur portable, j'ai pu construire avec 8 Go de RAM, mais j'ai limité les travaux à 1 et j'utilisais l'éditeur de liens en or. À l'époque, je ne savais pas de définir de manière sélective le nombre de travaux de liaison, ce qui est plus rapide, car la compilation peut se faire en parallèle. – PaulR

+0

Mon expérience avec l'échange pendant la construction de LLVM était que mon système est devenu complètement inutilisable. Je devais l'éteindre après quelques heures. Donc, je ne recommande pas de ne compter que sur l'espace d'échange pour cela. La construction, si elle finit jamais, peut prendre des jours. – PaulR