在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
}
}
这样的事情可能吗?
答案 0 :(得分:9)
只需使用模块。
mod ffi {
extern "C" {
pub fn exit(_: i32) -> !;
}
}
fn main() {
unsafe { ffi::exit(1); }
}