2017-08-07 88 views
3

我需要访问Rust中C导出的常量值。如何在Rust FFI中访问C全局变量/常量?

我想读取实际符号的值,而不是只是将值'n'paste的价值锈(在我的情况下,该值是一个指针,和C检查指针相等)。

extern void *magic; 

什么语法可以在Rust中读取magic: *const c_void

回答

3
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”。 ¡\ _(ツ)_ /¯\ _(ツ)_/

+4

'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