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

如何运行以prefer-dynamic编译的Rust程序?解决动态库加载失败

解决Rust动态编译后找不到libstd.dylib的问题

我来帮你搞定这个动态编译后运行报错的问题!

你遇到的dyld: Library not loaded错误,本质是因为用-Cprefer-dynamic开启动态链接后,系统不知道去哪里找Rust的标准库文件。@rpath是macOS的运行时路径标记,程序编译时只记录了这个标记,但没指定具体的库位置,所以运行时就找不到依赖的库了。

下面是几个实用的解决方案:

临时方案:设置环境变量

在运行程序前,先把Rust标准库的路径加到DYLD_LIBRARY_PATH里:

# 先自动获取Rust的系统根目录
export DYLD_LIBRARY_PATH=$(rustc --print sysroot)/lib/rustlib/x86_64-apple-darwin/lib/
# 然后运行编译好的程序
./hello

这个方法是临时生效的,关闭终端后设置就会失效。如果想永久生效,可以把上面的export命令添加到你的shell配置文件里(比如~/.zshrc或~/.bash_profile,取决于你日常用的是zsh还是bash)。

永久方案:编译时指定rpath

直接在编译的时候加上-C rpath参数,让程序自身包含标准库的路径信息:

rustc -C prefer-dynamic -C rpath hello.rs

这样编译出来的hello程序会自动在运行时找到对应的libstd库,不用再手动设置环境变量,后续直接运行./hello就能正常工作了。

额外说明

你用otool -L hello看到的@rpath/libstd-xxxx.dylib,就是程序依赖的动态标准库。用-C rpath编译后,再用otool查看的话,会发现@rpath后面会带上具体的库路径,这样系统就能正确定位到依赖文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:24:18