You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建LLVM-MLIR时无法使用LLD链接器的问题排查与解决

MLIR构建时启用LLD报错的原因及解决方法

问题场景

按照MLIR官方构建指南构建MLIR时,添加可选参数-DLLVM_ENABLE_LLD=ON后,CMake抛出核心错误:

Host compiler does not support '-fuse-ld=lld'

环境信息

  • Clang版本:
Ubuntu clang version 12.0.0-3ubuntu1~20.04.5
  • LLD版本:
LLD 10.0.0 (compatible with GNU linkers)

执行的CMake命令

cmake -G Ninja ../llvm \
          -DCMAKE_INSTALL_PREFIX=/home/user/Documents/compilers/llvm/ \
          -DLLVM_PARALLEL_COMPILE_JOBS=7 \
          -DLLVM_PARALLEL_LINK_JOBS=1 \
          -DLLVM_BUILD_EXAMPLES=ON \
          -DLLVM_TARGETS_TO_BUILD="X86;NVPTX;AMDGPU" \
          -DCMAKE_BUILD_TYPE=Release \
          -DLLVM_EXTERNAL_PROJECTS=iwyu \
          -DLLVM_EXTERNAL_IWYU_SOURCE_DIR=/home/user/Downloads/compilers/include-what-you-use/ \
          -DLLVM_ENABLE_ASSERTIONS=ON \
          -DLLVM_CCACHE_BUILD=ON \
          -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
          -DLLVM_ENABLE_PROJECTS='clang;lldb;lld;mlir;clang-tools-extra;compiler-rt' \
          -DCMAKE_C_COMPILER=clang \
          -DCMAKE_CXX_COMPILER=clang++ \
          -DLLVM_ENABLE_LLD=ON

附加错误信息(来自CMakeError.log)

Checking whether the ASM compiler is GNU using "--version" did not match "(GNU assembler)|(GCC)|(Free Software Foundation)":
Ubuntu clang version 12.0.0-3ubuntu1~20.04.5
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

Determining if the include file malloc/malloc.h exists failed with the following output:
Change Dir: /home/user/Downloads/compilers/llvm-project/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/ninja cmTC_be9c4 && [1/2] Building C object CMakeFiles/cmTC_be9c4.dir/CheckIncludeFile.c.o
FAILED: CMakeFiles/cmTC_be9c4.dir/CheckIncludeFile.c.o
/usr/bin/clang -O3 -DNDEBUG -o CMakeFiles/cmTC_be9c4.dir/CheckIncludeFile.c.o -c CheckIncludeFile.c
CheckIncludeFile.c:1:10: fatal error: 'malloc/malloc.h' file not found
#include <malloc/malloc.h>
^~~~~~~~~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.

报错原因分析

  1. LLD版本不兼容:Clang 12需要匹配至少同版本的LLD(12.x),当前系统LLD为10.0.0,版本差距过大导致Clang无法识别该版本的LLD,触发-fuse-ld=lld不支持的错误。
  2. 系统头文件缺失:malloc/malloc.h是BSD系头文件,Ubuntu(GNU/Linux)使用stdlib.h替代,CMake跨平台检测时找不到该文件,干扰构建流程。
  3. 汇编器检测异常:CMake默认期望GNU汇编器,但当前系统使用Clang集成的汇编器,版本检测逻辑不匹配导致报错。

解决步骤

1. 升级/指定匹配版本的LLD

  • 安装与Clang 12对应的LLD版本:
    sudo apt install lld-12
    
  • 在CMake命令中明确指定LLD路径,替换原有的-DLLVM_ENABLE_LLD=ON:
    -DCMAKE_LINKER=/usr/bin/lld-12 \
    -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld-12" \
    -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld-12" \
    -DCMAKE_MODULE_LINKER_FLAGS="-fuse-ld=lld-12"
    

2. 修复头文件与汇编器检测问题

  • 安装GNU汇编器,满足CMake的检测要求:
    sudo apt install binutils
    
  • 或强制CMake使用Clang的汇编器:
    -DCMAKE_ASM_COMPILER=clang
    
  • 安装系统核心头文件包,解决malloc/malloc.h缺失问题:
    sudo apt install libc6-dev
    

3. 清理并重新构建

删除原有build目录下的缓存文件,重新执行修改后的CMake命令:

rm -rf build/*
cd build
# 执行修改后的cmake命令

内容的提问来源于stack exchange,提问作者dearn44

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:57:07