铁锈货物dylib澄清

时间:2017-05-24 22:42:38

标签: macos rust embed dylib rust-cargo

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

经过一番研究后,发现cdylib静态链接了Rust依赖项,dylib用于与其他Rust项目进行动态链接。

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