是否可以在不污染命名空间的情况下声明extern“C”函数?

时间:2016-08-15 03:38:04

标签: namespaces rust ffi

在Rust中,extern C函数可以在外部作用域中声明:

#[link(name = "some_lib")]
extern "C" {
    pub fn foo(path: *const c_char);
    pub fn bar(path: *const c_char);
    pub fn baz(path: *const c_char);
    pub fn fez(path: *const c_char);
}

虽然可以接受,但需要直接访问每个功能foo() bar() ...等等。

是否可以使用公共前缀来访问它们?

封装如何工作的示例:

namespace some_lib {
    #[link(name = "some_lib")]
    extern "C" {
        pub fn foo(path: *const c_char);
        // ... etc ...
    }
}

fn some_rust_function() {
    unsafe {
        some_lib::foo();  // <-- example usage
    }

}

这样的事情可能吗?

1 个答案:

答案 0 :(得分:9)

只需使用模块。

mod ffi {
    extern "C" {
        pub fn exit(_: i32) -> !;
    }
}

fn main() {
    unsafe { ffi::exit(1); }
}