LLVM编译报错解决:collect2: fatal error: ld terminated with signal 9 [Killed]

这篇具有很好参考价值的文章主要介绍了LLVM编译报错解决:collect2: fatal error: ld terminated with signal 9 [Killed]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LLVM 编译安装

  1. 克隆代码到本地
git clone https://github.com/llvm/llvm-project.git
# 需要时间比较长 如果不需要做额外的操作可以只克隆最新的commit
git clone --depth 1 https://github.com/llvm/llvm-project.git
  1. 配置编译选项
cd llvm-project
cmake -S llvm -B build -G <generator> [options]

generator一般使用Ninja,而 options 中必须要传入的参数是构建类型CMAKE_BUILD_TYPE

不同的CMAKE_BUILD_TYPE区别如下:

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
  1. Release适合LLVM和Clang的用户,针对运行速度进行了优化,基本没有任何调试信息和断言信息。
  2. Debug适合LLVM的开发者,输出的信息最丰富,但没有进行任何方面的优化。
  3. RelWithDebInfo适合有部分开发需求的用户,该构建方式针对速度进行了优化,且会输出调试信息。
  4. MinSizeRel适合空间硬盘空间受限的用户,该构建方式同样没有任何调试信息和断言信息,但是针对占用空间大小进行了优化。

综上所述,一般的构建可以通过下面的命令进行:

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.

查了一下网上给出的解决方法和原因,

这种情况很可能是OOM了,因为默认情况下所有的可执行文件都是静态链接的,所以会需要很多RAM

解决方法如下:

  1. 减少链接时的并行,通过添加-DLLVM_PARALLEL_LINK_JOBS=1编译选项来控制链接的并行。
  2. 通过-Wl, no-keep-memory-Wl,--reduce-memory-overheads两个或其中一个加入CMAKE_EXE_LINKER_FLAGS来减少内存的消耗。
  3. 更换链接器,通过添加-fuse-ld=gold或者-fuse-ld=lldCMAKE_EXE_LINKER_FLAGS来更换链接器。

尝试了方法1,直接解决了:

cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=1
cmake --build build

cmake 参数:文章来源地址https://www.toymoban.com/news/detail-672193.html

  • -S : path to the source
  • -B : path to the build
  • –build : build a CMake-generate project binary tree.

到了这里,关于LLVM编译报错解决:collect2: fatal error: ld terminated with signal 9 [Killed]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包