Rust 如何在FFI中发布常量字符串?
我想让一个Rust库向C公开一个Rust 如何在FFI中发布常量字符串?,rust,ffi,Rust,Ffi,我想让一个Rust库向C公开一个const char*静态字符串,以便与现有接口兼容(特别是)。也就是说,C头文件具有 extern char const *my_string; 在C语言中,库只需要 char const *my_string = "hi"; 在《铁锈》中,我试过类似的东西 pub static my_string: *const libc::c_char = unsafe { "hi\0" as *const libc::c_char }; 但这让人抱怨 error:
const char*
静态字符串,以便与现有接口兼容(特别是)。也就是说,C头文件具有
extern char const *my_string;
在C语言中,库只需要
char const *my_string = "hi";
在《铁锈》中,我试过类似的东西
pub static my_string: *const libc::c_char = unsafe { "hi\0" as *const libc::c_char };
但这让人抱怨
error: casting `&'static str` as `*const i8` is invalid
似乎我不能使用
CString
等,因为它们不是编译时常量表达式。我们需要一个指向以零结尾的字节的公共、静态、非混合指针:
#[export_name=“CONST_C_STR”]//或#[no_mangle]
pub static CONST_C_STR:&[u8;20]=b“一个常量C字符串\0”;
这是一个简单的C程序:
#包括
外部字符*CONST_C_STR;
int main(int argc,char*argv[]){
printf(“%s\n”,CONST_C_STR);
}
板条箱提供了方便的宏c\u str
,它将0字节附加到Rust字符串文字,并将其表示为CStr
引用
免责声明:我是板条箱的作者。谢谢!这就是我一直在寻找的东西,当然很奇怪。我提出了一个问题:为什么全局不同步。