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

为何cargo run可正常运行,直接执行二进制文件却缺失共享库?

问题分析与解决

为什么cargo run --release能正常运行,直接执行二进制文件却报错?

是的,cargo run --release会隐式设置环境变量帮助程序找到依赖的动态库:

  • Linux系统下,它会自动将构建过程中生成/下载的共享库所在路径添加到LD_LIBRARY_PATH环境变量;
  • macOS系统下则对应DYLD_LIBRARY_PATH。

这些库的路径通常在target/release/build/的子目录中,直接执行二进制时,系统不会自动加载该路径,因此找不到libonnxruntime.so.1.8.1。

解决方法

方法1:临时设置环境变量运行

先定位libonnxruntime.so.1.8.1的所在目录,将其加入LD_LIBRARY_PATH后再运行二进制:

# 自动查找库的路径并设置环境变量
export LD_LIBRARY_PATH=$(find target/release/build -name "libonnxruntime.so.1.8.1" -exec dirname {} \;):$LD_LIBRARY_PATH
# 运行二进制文件
./target/release/onnx-test

方法2:静态编译onnxruntime(推荐)

修改Cargo.toml中onnxruntime的依赖配置,启用静态编译特性,将onnxruntime的代码打包到二进制文件中,彻底摆脱对外部共享库的依赖:

[dependencies]
# 其他依赖保持不变
onnxruntime = { version = "0.0.14", features = ["static"] }

重新编译项目:

cargo build --release

生成的二进制文件可直接运行,无需额外配置环境变量。

方法3:将库复制到系统标准路径

找到libonnxruntime.so.1.8.1并复制到系统默认的库查找路径(如/usr/local/lib),再更新系统库缓存:

# 查找并复制库文件
find target/release/build -name "libonnxruntime.so.1.8.1" -exec cp {} /usr/local/lib \;
# 更新系统库缓存
sudo ldconfig

此方法适合长期使用该程序的场景,但需要管理员权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:42:23