Compiling
使用 llvm-5.0 建構 llvm-6.0.0 時無法向 ../../lib/libLLVMSupport.a 添加符號
以下是有關我的系統和我使用的編譯器的資訊:
Linux version 4.9.0-5-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-1 8) ) #1 SMP Debian 4.9.65-3+deb9u2 (2018-01-04) clang version 5.0.1-svn325091-1~exp1 (branches/release_50) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin
我在使用 libcxx 建構 llvm-6.0.0 時遇到問題。我從llvm下載頁面下載了所有這些並將原始碼放在那裡:
llvm-6.0 build llvm-6.0.0 ...(other stuff) tools clang projects libcxx libcxxabi
這是我使用的命令:
#!/bin/bash #References: https://libcxx.llvm.org/docs/BuildingLibcxx.html cd build #The option for llvm starts from line 5, for libcxx starts from line 15 cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER=clang-5.0 \ -DCMAKE_CXX_COMPILER=clang++-5.0 \ -DCMAKE_INSTALL_PREFIX=/usr/local/ \ -DLLVM_INSTALL_BINUTILS_SYMLINKS=True \ -DLLVM_INSTALL_CCTOOLS_SYMLINKS=True \ -DLLVM_ENABLE_CXX1Y=True \ -DLLVM_ENABLE_EH=True \ -DLLVM_ENABLE_RTTI=True \ -DLLVM_ENABLE_LTO=Thin \ -DLIBCXX_ENABLE_ASSERTIONS=False \ -DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=True \ -DLIBCXX_LIBDIR_SUFFIX=/usr/local/lib \ -DLIBCXX_BENCHMARK_NATIVE_STDLIB="libstdc++"\ -G Unix Makefiles \ .. cmake --build .
cmake 給出:
[ 0%] Building CXX object lib/Demangle/CMakeFiles/LLVMDemangle.dir/ItaniumDemangle.cpp.o [ 0%] Linking CXX static library ../libLLVMDemangle.a [ 0%] Built target LLVMDemangle [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/AMDGPUMetadata.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/APFloat.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/APInt.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/APSInt.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ARMAttributeParser.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ARMWinEH.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Allocator.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/BinaryStreamError.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/BinaryStreamReader.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/BinaryStreamRef.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/BinaryStreamWriter.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/BlockFrequency.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/BranchProbability.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/CachePruning.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/circular_raw_ostream.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Chrono.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/COM.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/CodeGenCoverage.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/CommandLine.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Compression.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTFWrapper.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/CrashRecoveryContext.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/DataExtractor.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Debug.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/DebugCounter.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/DeltaAlgorithm.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/DAGDeltaAlgorithm.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Error.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ErrorHandling.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/FileUtilities.cpp.o [ 0%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/FileOutputBuffer.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/FoldingSet.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/FormattedStream.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/FormatVariadic.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/GlobPattern.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/GraphWriter.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Hashing.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/IntEqClasses.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/IntervalMap.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/JamCRC.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/KnownBits.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/LEB128.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/LineIterator.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Locale.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/LockFileManager.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/LowLevelType.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ManagedStatic.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/MathExtras.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/MemoryBuffer.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/MD5.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/NativeFormatting.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Options.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Parallel.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/PluginLoader.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/PrettyStackTrace.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/RandomNumberGenerator.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Regex.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ScaledNumber.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ScopedPrinter.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/SHA1.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/SmallPtrSet.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/SmallVector.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/SourceMgr.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/SpecialCaseList.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Statistic.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/StringExtras.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/StringMap.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/StringPool.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/StringSaver.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/StringRef.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/SystemUtils.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/TarWriter.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/TargetParser.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ThreadPool.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Timer.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ToolOutputFile.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/TrigramIndex.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Triple.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Twine.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Unicode.cpp.o [ 1%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/YAMLParser.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/YAMLTraits.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/raw_os_ostream.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/raw_ostream.cpp.o [ 2%] Building C object lib/Support/CMakeFiles/LLVMSupport.dir/regcomp.c.o [ 2%] Building C object lib/Support/CMakeFiles/LLVMSupport.dir/regerror.c.o [ 2%] Building C object lib/Support/CMakeFiles/LLVMSupport.dir/regexec.c.o [ 2%] Building C object lib/Support/CMakeFiles/LLVMSupport.dir/regfree.c.o [ 2%] Building C object lib/Support/CMakeFiles/LLVMSupport.dir/regstrlcpy.c.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/xxhash.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Atomic.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/DynamicLibrary.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Errno.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Host.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Memory.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Mutex.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Path.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Process.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Program.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/RWMutex.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Signals.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/TargetRegistry.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ThreadLocal.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Threading.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Valgrind.cpp.o [ 2%] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Watchdog.cpp.o [ 2%] Linking CXX static library ../libLLVMSupport.a [ 2%] Built target LLVMSupport [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/Error.cpp.o [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/Main.cpp.o [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/Record.cpp.o [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/SetTheory.cpp.o [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/StringMatcher.cpp.o [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/TableGenBackend.cpp.o [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/TGLexer.cpp.o [ 2%] Building CXX object lib/TableGen/CMakeFiles/LLVMTableGen.dir/TGParser.cpp.o [ 2%] Linking CXX static library ../libLLVMTableGen.a [ 2%] Built target LLVMTableGen [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmMatcherEmitter.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterEmitter.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/Attributes.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CallingConvEmitter.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeEmitterGen.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenDAGPatterns.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenHwModes.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenInstruction.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenMapTable.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenRegisters.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenSchedule.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CodeGenTarget.cpp.o [ 2%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherGen.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherOpt.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcher.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DFAPacketizerEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/DisassemblerEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/FastISelEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/FixedLenDecoderEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/GlobalISelEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/InfoByHwMode.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/InstrInfoEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/InstrDocsEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/IntrinsicEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/OptParserEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/PseudoLoweringEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/RegisterBankEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/RegisterInfoEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/SDNodeProperties.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/SearchableTableEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/SubtargetEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/SubtargetFeatureInfo.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/TableGen.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/Types.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86DisassemblerTables.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86EVEX2VEXTablesEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86FoldTablesEmitter.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86ModRMFilters.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/X86RecognizableInstr.cpp.o [ 4%] Building CXX object utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/CTagsEmitter.cpp.o [ 4%] Built target obj.llvm-tblgen [ 4%] Linking CXX executable ../../bin/llvm-tblgen ../../lib/libLLVMSupport.a: error adding symbols: Archive has no index; run ranlib to add one clang: error: linker command failed with exit code 1 (use -v to see invocation) utils/TableGen/CMakeFiles/llvm-tblgen.dir/build.make:158: recipe for target 'bin/llvm-tblgen' failed make[2]: *** [bin/llvm-tblgen] Error 1 CMakeFiles/Makefile2:906: recipe for target 'utils/TableGen/CMakeFiles/llvm-tblgen.dir/all' failed make[1]: *** [utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2 Makefile:149: recipe for target 'all' failed make: *** [all] Error 2
我試圖通過以下方式解決此問題:
- 用於
cmake --build . --target clean
刪除建構的文件並cmake --build .
再次執行。- 按照上面給出的說明,將目錄更改為 lib,然後執行
ranlib libLLVMSupport.a
.但這些都不起作用:我又跑
cmake --build .
了,他們給了:[ 0%] Built target LLVMDemangle [ 2%] Built target LLVMSupport [ 2%] Built target LLVMTableGen [ 4%] Built target obj.llvm-tblgen [ 4%] Linking CXX executable ../../bin/llvm-tblgen ../../lib/libLLVMSupport.a: error adding symbols: Archive has no index; run ranlib to add one clang: error: linker command failed with exit code 1 (use -v to see invocation) utils/TableGen/CMakeFiles/llvm-tblgen.dir/build.make:158: recipe for target 'bin/llvm-tblgen' failed make[2]: *** [bin/llvm-tblgen] Error 1 CMakeFiles/Makefile2:906: recipe for target 'utils/TableGen/CMakeFiles/llvm-tblgen.dir/all' failed make[1]: *** [utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2 Makefile:149: recipe for target 'all' failed make: *** [all] Error 2
我在方法2中檢查了lib/libLLVMSupport.a的時間戳,發現它沒有改變,意味著它不是由
cmake --build .
.如何解決這個問題?
我終於找到了真正導致此錯誤的原因。
cmake 使用 gnu 黃金鍊接器,歸檔 libLLVMSupport.a 由 LLVM IR 程式碼組成,難怪它出錯了。
在我切換到使用 ld.lld-5.0 後,所有錯誤都消失了。
為什麼不將檔案作為單獨的文件保留?然後將應用程序連結到所有必需的存檔。