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

如何解决LLVMLinkInMCJIT函数未定义引用错误?

修复LLVM MCJIT的LLVMLinkInMCJIT未定义引用错误

问题描述

引入LLVM的MCJIT.h头文件后,出现如下链接错误:

/usr/bin/ld: CMakeFiles/vm-llvm-example.dir/example/main.cpp.o: in function `_GLOBAL__sub_I_main.cpp':
/home/pegasus/Documents/llvm-project/llvm/include/llvm/ExecutionEngine/MCJIT.h:35:(.text.startup+0x25e): undefined reference to `LLVMLinkInMCJIT'

错误指向MCJIT.h中的extern "C" void LLVMLinkInMCJIT();声明,提示该函数的定义缺失。

原因分析

MCJIT.h中通过一个全局结构体的构造函数,在程序启动时尝试调用LLVMLinkInMCJIT(),目的是强制链接MCJIT组件(避免编译器优化掉未直接引用的代码)。但这个函数的定义并不在头文件中,而是存在于LLVM的MCJIT运行时库里,如果编译时没有链接对应的库,链接器就会找不到该函数的实现。

修复方案

方案1:使用CMake构建(推荐)

利用LLVM官方提供的CMake模块,自动处理依赖库的链接:

# 查找LLVM配置
find_package(LLVM REQUIRED CONFIG)

# 添加LLVM的头文件路径和编译定义
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})

# 构建你的可执行文件
add_executable(vm-llvm-example example/main.cpp)

# 链接MCJIT及相关依赖库
target_link_libraries(vm-llvm-example PRIVATE
  LLVMExecutionEngine
  LLVMMCJIT
  LLVMCore
  LLVMSupport
  # 根据你的代码需求,添加其他必要的LLVM库
)

方案2:手动编译链接

如果直接用编译器命令行编译,需要通过llvm-config获取正确的链接参数,显式链接MCJIT相关库:

clang++ main.cpp -o vm-llvm-example `llvm-config --cxxflags --ldflags --libs executionengine mcjit core support`

解释:

  • llvm-config --cxxflags:输出LLVM的编译参数
  • llvm-config --ldflags:输出LLVM的链接路径参数
  • llvm-config --libs executionengine mcjit core support:输出需要链接的LLVM库列表,其中executionengine和mcjit就是包含LLVMLinkInMCJIT定义的库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:53:23