LLVM 編譯安裝
- 克隆代碼到本地
git clone https://github.com/llvm/llvm-project.git
# 需要時間比較長 如果不需要做額外的操作可以只克隆最新的commit
git clone --depth 1 https://github.com/llvm/llvm-project.git
- 配置編譯選項
cd llvm-project
cmake -S llvm -B build -G <generator> [options]
generator一般使用Ninja,而 options 中必須要傳入的參數(shù)是構(gòu)建類型CMAKE_BUILD_TYPE
不同的CMAKE_BUILD_TYPE區(qū)別如下:
Build Type | Optimization | Debug Info | Assertion |
---|---|---|---|
Release | For Speed | No | No |
Debug | None | Yes | Yes |
RelWithDebInfo | For Speed | Yes | No |
MinSizeRel | For Size | No | No |
- Release適合LLVM和Clang的用戶,針對運(yùn)行速度進(jìn)行了優(yōu)化,基本沒有任何調(diào)試信息和斷言信息。
- Debug適合LLVM的開發(fā)者,輸出的信息最豐富,但沒有進(jìn)行任何方面的優(yōu)化。
- RelWithDebInfo適合有部分開發(fā)需求的用戶,該構(gòu)建方式針對速度進(jìn)行了優(yōu)化,且會輸出調(diào)試信息。
- MinSizeRel適合空間硬盤空間受限的用戶,該構(gòu)建方式同樣沒有任何調(diào)試信息和斷言信息,但是針對占用空間大小進(jìn)行了優(yōu)化。
綜上所述,一般的構(gòu)建可以通過下面的命令進(jìn)行:
cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build
編譯報錯解決
編譯LLVM時報錯:
[3223/3502] Linking CXX executable bin/llvm-c-test
FAILED: bin/llvm-c-test
: && /usr/bin/c++ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -fno-lifetime-dse -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-nonnull -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment -Wno-misleading-indentation -fdiagnostics-color -g -Wl,-rpath-link,/home/shanlin/llvm-project/build/./lib tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/attributes.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/calc.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/debuginfo.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/diagnostic.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/disassemble.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/echo.cpp.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/helpers.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/include-all.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/main.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/module.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/metadata.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/object.c.o tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/targets.c.o -o bin/llvm-c-test -Wl,-rpath,"\$ORIGIN/../lib:/usr/local/lib:" lib/libLLVMAArch64AsmParser.a lib/libLLVMAMDGPUAsmParser.a lib/libLLVMARMAsmParser.a lib/libLLVMAVRAsmParser.a lib/libLLVMBPFAsmParser.a li
.....
lib/libLLVMBitstreamReader.a lib/libLLVMTextAPI.a lib/libLLVMDebugInfoMSF.a lib/libLLVMDebugInfoBTF.a lib/libLLVMARMDesc.a lib/libLLVMARMInfo.a lib/libLLVMARMUtils.a lib/libLLVMHexagonDesc.a lib/libLLVMHexagonInfo.a lib/libLLVMLanaiDesc.a lib/libLLVMLanaiInfo.a lib/libLLVMLoongArchDesc.a lib/libLLVMLoongArchInfo.a lib/libLLVMRISCVDesc.a lib/libLLVMRISCVInfo.a lib/libLLVMSystemZDesc.a lib/libLLVMSystemZInfo.a lib/libLLVMWebAssemblyDesc.a lib/libLLVMWebAssemblyInfo.a lib/libLLVMMCDisassembler.a lib/libLLVMCodeGenTypes.a lib/libLLVMMC.a lib/libLLVMBinaryFormat.a lib/libLLVMTargetParser.a lib/libLLVMDebugInfoCodeView.a lib/libLLVMSupport.a lib/libLLVMDemangle.a -lrt -ldl -lpthread -lm /usr/local/lib/libz.so /usr/lib/x86_64-linux-gnu/libtinfo.so && :
collect2: fatal error: ld terminated with signal 9 [Killed]
compilation terminated.
查了一下網(wǎng)上給出的解決方法和原因,
這種情況很可能是OOM了,因為默認(rèn)情況下所有的可執(zhí)行文件都是靜態(tài)鏈接的,所以會需要很多RAM
解決方法如下:
- 減少鏈接時的并行,通過添加
-DLLVM_PARALLEL_LINK_JOBS=1
編譯選項來控制鏈接的并行。 - 通過
-Wl, no-keep-memory
和-Wl,--reduce-memory-overheads
兩個或其中一個加入CMAKE_EXE_LINKER_FLAGS
來減少內(nèi)存的消耗。 - 更換鏈接器,通過添加
-fuse-ld=gold
或者-fuse-ld=lld
到CMAKE_EXE_LINKER_FLAGS
來更換鏈接器。
嘗試了方法1,直接解決了:文章來源:http://www.zghlxwxcb.cn/news/detail-672193.html
cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=1
cmake --build build
cmake 參數(shù):文章來源地址http://www.zghlxwxcb.cn/news/detail-672193.html
- -S : path to the source
- -B : path to the build
- –build : build a CMake-generate project binary tree.
到了這里,關(guān)于LLVM編譯報錯解決:collect2: fatal error: ld terminated with signal 9 [Killed]的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!