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

Windows下如何为lli指定Rust生成LLVM-IR的缺失符号依赖?

在Windows下用lli运行Rust生成的LLVM-IR文件

问题背景

已将Rust代码导出为LLVM-IR(.ll)文件,可通过clang或llc+link.exe手动编译链接,但使用lli运行时,无法正确传递依赖(Rust库、系统库、临时.o文件),虽找到部分参数用法,但仍出现__rust_no_alloc_shim_is_unstable符号无法解析的错误。目标是调试Rust生成的LLVM-IR,依赖lli工具。

正确传递依赖给lli的参数用法

1. Rust标准库及相关rlib文件

使用--extra-archive参数指定完整路径,需包含所有用到的Rust核心库(不只是libstd):

--extra-archive="C:\Users\$USER_NAME\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libstd-$RANDOM_STRING.rlib"
--extra-archive="C:\Users\$USER_NAME\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc-$RANDOM_STRING.rlib"

替换$USER_NAME和$RANDOM_STRING为实际路径中的对应值

2. Rust编译生成的临时目标文件

使用--extra-object参数,必须包含所有cargo rustc --release -- -C save-temps生成的.rcgu.o文件,而不只是单个文件:

--extra-object=".\target\release\deps\$PROJECT_NAME.$RANDOM_STRING.rcgu.o"
--extra-object=".\target\release\deps\$PROJECT_NAME.$RANDOM_STRING_alloc_shim.rcgu.o"

3. 系统库处理

静态系统库

用--extra-archive指定MSVC静态库路径:

--extra-archive="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\lib\x64\msvcrt.lib"

动态系统库(如ws2_32、userenv)

直接加载系统DLL,使用--load参数:

--load="C:\Windows\System32\ws2_32.dll"
--load="C:\Windows\System32\userenv.dll"

解决__rust_no_alloc_shim_is_unstable符号缺失问题

该符号属于Rust分配器垫片,需确保:

  1. --extra-object参数包含了所有临时目标文件,尤其是带有alloc_shim关键字的.rcgu.o文件
  2. 如果仍缺失,添加Rust toolchain目录下的liballoc_shim_-$RANDOM_STRING.rlib库:
--extra-archive="C:\Users\$USER_NAME\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc_shim-$RANDOM_STRING.rlib"

完整lli命令示例

lli ^
--extra-archive="C:\Users\YourName\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libstd-xxxxxx.rlib" ^
--extra-archive="C:\Users\YourName\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc-xxxxxx.rlib" ^
--extra-archive="C:\Users\YourName\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\liballoc_shim-xxxxxx.rlib" ^
--extra-archive="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\lib\x64\msvcrt.lib" ^
--extra-object=".\target\release\deps\your_project.xxxxxx.rcgu.o" ^
--extra-object=".\target\release\deps\your_project.xxxxxx_alloc_shim.rcgu.o" ^
--load="C:\Windows\System32\ws2_32.dll" ^
--load="C:\Windows\System32\userenv.dll" ^
your_llvm_ir_file.ll

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:23