2017-08-07 128 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