Keyword extern

source ·
Expand description

链接到或导入外部代码。

extern 关键字在 Rust 中的两个位置使用。 一种是与 crate 关键字结合使用,使您的 Rust 代码知道您项目中的其他 Rust crates,即 extern crate lazy_static;。 另一个用途是在外部函数接口 (FFI) 中。

extern 在 FFI 中用于两种不同的上下文。 第一种是外部块的形式,用于声明 Rust 代码可以调用外部代码的函数接口。

#[link(name = "my_c_library")]
extern "C" {
    fn my_c_function(x: i32) -> bool;
}
Run

该代码将在运行时尝试与类 Unix 系统上的 libmy_c_library.so 和 Windows 上的 my_c_library.dll 链接,如果找不到要链接的内容,则尝试与 panic 链接。

然后,Rust 代码可以使用 my_c_function,就好像它是其他任何不安全的 Rust 函数一样。 使用非 Rust 语言和 FFI 本质上是不安全的,因此包装程序通常围绕 C API 构建。

FFI 的镜像用例也通过 extern 关键字完成:

#[no_mangle]
pub extern "C" fn callable_from_c(x: i32) -> bool {
    x % 3 == 0
}
Run

如果编译为 dylib,则可以将 C00 库链接到生成的 .so,并且可以像使用任何其他库一样使用该函数。

有关 FFI 的更多信息,请检查 Rust 书Reference