dll – 可以以C库做的方式从其他语言中使用rust库吗?

写这样的图书馆我会不得不牺牲std?例如,如果可能,我将如何将python绑定写入生锈库?
最佳答案
首先,指出Rust要创建一个对C可见的函数:

#[no_mangle]
pub extern "C" fn some_func() { ... }

这告诉Rust避免破坏输出符号并使用C ABI。

接下来,跨越边界时需要使用C兼容类型。这里有一些对我有用的建议:

>如果您计划将Rust结构传递给C作为不透明数据,它将返回到其他函数,则将其作为Box T返回,并将其作为“T”或“T”框。实质上,这意味着您放弃了Rust中的结构的所有权,并赋予C代码所有权。 C代码必须确保如果它将指针传回一个接收Box的函数,它不再使用它。
>如果你打算将一个Rust结构传递给C作为C结构,那么Rust可以方便地以C兼容的方式来表示它的结构。但是,您将要将在这些结构中放置的值的种类限制为也具有兼容的C表示形式的类型。当然,数字类型和布尔是安全的。
>您可以在core::raw下的文档中看到更复杂类型(如vecs和字符串)的Rust表示.A& str和& [T]表示为raw::Slice,而Vec raw::Vec。
>您也可以将类型转换为libc::types
>最后,你可能会发现自己需要直接使用指针。查看std::mem有用的API。

转载注明原文:dll – 可以以C库做的方式从其他语言中使用rust库吗? - 代码日志