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

Rust程序无法找到当前路径下的librustc_codegen_spirv.so库

无法加载librustc_codegen_spirv.so的排查与解决

以下是针对你遇到问题的常见原因和对应解决办法:

1. 动态库搜索路径未包含当前目录

系统加载动态库时,默认不会将当前工作目录纳入搜索路径——哪怕你在项目根目录启动程序也一样。Linux/macOS会优先从LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(macOS)指定的路径查找库文件。

  • 临时解决:启动程序前先执行环境变量设置
    # Linux
    export LD_LIBRARY_PATH=. $LD_LIBRARY_PATH
    # macOS
    export DYLD_LIBRARY_PATH=. $DYLD_LIBRARY_PATH
    
    之后再运行你的程序。
  • 永久解决:将库所在路径加入系统动态库配置。比如Linux下,在/etc/ld.so.conf.d/目录下新建一个rustgpu.conf文件,写入库的绝对路径,然后执行sudo ldconfig刷新缓存。

2. 库与程序架构不匹配

检查你的可执行文件和librustc_codegen_spirv.so的CPU架构是否一致(比如x86_64 vs ARM64):

# 查看库的架构
file ./librustc_codegen_spirv.so
# 查看程序的架构
file ./your-program-binary

如果架构不匹配,需要重新编译对应架构的库或程序。

3. 库依赖缺失

librustc_codegen_spirv.so可能依赖其他动态库,而这些依赖不在系统搜索路径中:

# Linux查看依赖
ldd ./librustc_codegen_spirv.so
# macOS查看依赖
otool -L ./librustc_codegen_spirv.so

检查输出中是否有标记为not found的依赖项,安装对应依赖或者将依赖库的路径加入LD_LIBRARY_PATH/DYLD_LIBRARY_PATH。

4. 程序实际运行目录并非项目根目录

虽然lldb显示当前路径是项目根目录,但程序代码中可能存在切换工作目录的逻辑(比如调用std::env::set_current_dir)。可以在加载库的代码前添加一行打印,确认实际工作目录:

println!("Current working directory: {}", std::env::current_dir().unwrap().display());

如果输出不是项目根目录,要么调整加载库的路径为绝对路径,要么确保程序运行时工作目录正确。

5. 库文件权限不足

确保当前用户对librustc_codegen_spirv.so有读取和执行权限:

chmod +r ./librustc_codegen_spirv.so
chmod +x ./librustc_codegen_spirv.so

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:33:20