我有一个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,如果那是重要的
答案 0 :(得分:2)
经过一番研究后,发现cdylib
静态链接了Rust依赖项,dylib
用于与其他Rust项目进行动态链接。
至于嵌入,我发现的一切都表明静态链接Rust库是推荐的方法。为了动态使用Rust库,在rpath = true
部分设置[profile]
解决了冗余dylibs的问题。