< 返回版块

jmjoy 发表于 2019-12-15 11:11

Tags:ffi

最近在搞一个应用的扩展,是用动态链接库.so的方式,原来是C语言写得,现在想用纯Rust实现,遇到了如题中的问题:

第一种方案:

extern "C" {
    #[no_mangle]
    static a_global_variable: *mut c_void = 0 as *mut c_void;
}

编译是不通过的,因为不允许在extern里面有赋值操作。

第二种方案:

extern "C" {
    #[no_mangle]
    static a_global_variable: *mut c_void;
}

before_main! {
    unsafe {
        *a_global_variable = 0 as *mut c_void;
    }
}

我觉得可行,但是crate-type = "cdylib"得有在main函数前执行before_main!这种手段,

求大神指教!

评论区

写评论
作者 jmjoy 2019-12-15 21:18

其实是我搞复杂了: https://stackoverflow.com/questions/31701655/can-a-rust-constant-static-be-exposed-to-c

1 共 1 条评论, 1 页