此问题已在此处有答案:
How do I create a global, mutable singleton?(8个回答)
昨天关门了。
我只是想声明一个指向crate中的结构体的指针,该crate由项目的几个组件共享,但使用相同的进程。我的意思是,目标是让它只初始化一次。
type Box = [u64; 64];
pub static mut mmaped: &mut Box;
在编译时generated this error。
free static item without body
其中,mmaped
稍后仅从顶部板条箱中以以下方式分配一次值,并且其值从其所依赖的多个板条箱中使用。
mmaped = unsafe { std::mem::transmute(addr) };
那么,如何提供mmaped
的定义,而不必多次定义mmap
?
这个问题不是How do I create a global, mutable singleton?的重复,因为它没有讨论将单例导出到crate之外,并且我得到了一个编译器错误。
1条答案
按热度按时间vxf3dgd41#
Rust编译器(2018)无法从代码生成有效的静态项,因为它缺少主体。您试图声明一个静态变量
mmaped
,但实际上没有使用任何值初始化它。所有静态变量必须在编译时初始化。std::mem::MaybeUninit
似乎是这个用例的完美解决方案。使用“未初始化”值初始化它。稍后用实际值更新它。因为它是静态的,所以不允许进一步的初始化。只要确保在实际初始化之前不要访问
mmaped
即可。