锈货物dylib澄清

jef*_*ime 4 embed macos dylib rust rust-cargo

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

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

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

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

如果那很重要,我正在macOS 10.12上使用Rust

jef*_*ime 6

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

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