我有一个 Rust 项目,我想将其作为 dylib 嵌入到另一个应用程序中。我在我的 Cargo.toml
中设置了 crate_type = ["dylib"]
,但我不确定这是否应该是 cdylib
。
当我构建项目时,它按预期在 target/debug
中生成了一个 libfoo.dylib
,但是查看 otool -L
它还链接到 target/debug/deps/
中的 libfoo.dylib
。如果我要在另一个应用程序中使用它,我是否必须提供两个动态库?
此外,当 crate 类型为 cdylib
时,它也会生成两个 dylib,但 deps 中的一个将在文件名末尾附加一个散列。我不确定这两种 crate 类型之间有什么区别。
我可以通过仅使用 rustc 来避免获得两个 dylib,但是我想使用 cargo。在其他应用程序中将 Rust 作为 dylib 嵌入的推荐方法是什么?
如果这很重要,我会在 macOS 10.12 上使用 Rust
最佳答案
经过更多研究,发现 cdylib
静态链接 Rust 依赖项,而 dylib
用于与其他 Rust 项目动态链接。
至于嵌入,我发现的一切都表明静态链接 Rust 库是推荐的方式。为了动态使用 Rust 库,在我的 [profile]
部分设置 rpath = true
解决了冗余 dylib 的问题。
关于macos - Rust cargo dylib 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44169635/