3
我需要访问Rust中C导出的常量值。如何在Rust FFI中访问C全局变量/常量?
我想读取实际符号的值,而不是只是将值'n'paste的价值锈(在我的情况下,该值是一个指针,和C检查指针相等)。
extern void *magic;
什么语法可以在Rust中读取magic: *const c_void
?
我需要访问Rust中C导出的常量值。如何在Rust FFI中访问C全局变量/常量?
我想读取实际符号的值,而不是只是将值'n'paste的价值锈(在我的情况下,该值是一个指针,和C检查指针相等)。
extern void *magic;
什么语法可以在Rust中读取magic: *const c_void
?
use std::os::raw::c_void;
extern "C" {
#[no_mangle]
static magic: *const c_void;
}
可选的,extern
之前可以有#[link(kind="static", name="<c library name>")]
得到实际联系的象征。
这有点奇怪,常数被声明为static
,但const
关键字失败,因为“extern items不能为const
”。 ¡\ _(ツ)_ /¯\ _(ツ)_/
'const'和'static'并不意味着Rust和C中的相同事情。Rust的'static'定义了该值有一个地址,'const'没有。在这种情况下,'const'更接近C'#define'。回顾[本书第一版中的'const'和'static'章节](https://doc.rust-lang.org/stable/book/first-edition/const-and-static.html)来了解更多。 – Shepmaster