Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何在FFI中发布常量字符串?_Rust_Ffi - Fatal编程技术网

Rust 如何在FFI中发布常量字符串?

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:

我想让一个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: 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
引用


免责声明:我是板条箱的作者。

谢谢!这就是我一直在寻找的东西,当然很奇怪。我提出了一个问题:为什么全局不同步。