Rust cargo dylib 说明

Rust cargo dylib clarification

我有一个 Rust 项目,我想将其作为 dylib 嵌入到另一个应用程序中。我在 Cargo.toml 中设置了 crate_type = ["dylib"],但我不确定是否应该改为 cdylib

当我构建项目时,它按预期在 target/debug 中生成了一个 libfoo.dylib,但是查看 otool -L 它也链接到 target/debug/deps/ 中的一个 libfoo.dylib =].如果我要在另一个应用程序中使用它,我是否必须同时提供两个动态库?

此外,当 crate 类型为 cdylib 时,它也会生成两个 dylib,但 deps 中的一个将在文件名末尾附加一个散列。我不确定这两种板条箱类型之间有什么区别。

我可以通过仅使用 rustc 来避免获得两个 dylib,但是我想使用 cargo。在其他应用程序中将 Rust 作为 dylib 嵌入的推荐方法是什么?

如果重要的话,我在 macOS 10.12 上使用 Rust

经过更多研究,结果是 cdylib 静态链接 Rust 依赖项,dylib 用于与其他 Rust 项目动态链接。

至于嵌入,我发现的一切都表明静态链接 Rust 库是推荐的方式。对于动态使用 Rust 库,在我的 [profile] 部分设置 rpath = true 解决了冗余 dylib 的问题。