rust 为什么'cargo run'可以工作,但直接运行可执行文件无法加载共享库?

wmtdaxz3  于 2023-10-20  发布在  Go
关注(0)|答案(1)|浏览(134)

我可以使用cargo run --release编译和运行Rust项目,没有任何问题。作为第二步,我只想使用cargo build --release创建二进制文件,然后通过运行./target/release/crate_name(也解释为here)来执行它。执行二进制文件会导致找不到某些共享库的行为。这是我的Cargo.toml

[package]
name = "onnx-test"
version = "0.1.0"
edition = "2023"

[dependencies]
actix-web = "4"
futures = "0.3.26"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
onnxruntime = "0.0.14"
image = "0.24.5"
imageproc = "0.23.0"
rusttype = "0.9.3"
lazy_static = "1.4.0"
base64 = "0.21.0"
actix-cors = "0.6.4"
derive_more = "0.99.17"
actix-web-validator = "5.0.1"
validator = { version = "0.16", features = ["derive"] }
regex = "1.5.6"

这是错误消息:

error while loading shared libraries: libonnxruntime.so.1.8.1: cannot open shared object file: No such file or directory

所以我的问题是,cargo run --release是否隐式地链接了一些库?我的意思是库在target/release/build/...路径中的某个地方进行了编译。通过提供--verbose标志,我没有发现任何东西。
以下是target/release的内容:

build/
deps/
examples/
incremental/
onnx-test
onnx-test.d
yc0p9oo0

yc0p9oo01#

是的。行为记录在案。
Cargo还在编译和运行二进制文件时使用cargo runcargo test等命令设置动态库路径。这有助于定位构建过程中的共享库。
这是当前的实现。

相关问题