我怎样才能包含_bytes!到一个单一的外部文件?

问题描述 投票:0回答:1

我正在用 Rust 编写一个游戏,我正在使用

include_bytes!
将一些音频捆绑到可执行文件中。音频文件约为 250MB。我正在为 Intel Mac 和 ARM Mac 进行编译,然后创建通用二进制文件:

lipo -create -output target/universal target/intel target/arm

通用二进制文件> 500MB,包含两份音频副本(每个目标一份)。有没有办法继续使用

include_bytes!
或类似的宏并最终在通用可执行文件中获得一份音频数据副本?

或者,有没有办法使用

include_bytes!
但将所有包含的字节写入可以在运行时加载的单个外部文件(例如
game.dat
)?

我可以在运行时单独加载所有文件,但我喜欢

include_bytes!
的便利,并且如果可能的话更愿意继续使用它(或类似的东西)。

rust static-linking
1个回答
0
投票

Mac OS 上的通用二进制文件实际上是一个简单的存档文件,例如包含两个二进制文件的 tarball。这就是为什么需要复制静态链接的数据。

当您运行程序时,只会将适合您系统的二进制文件加载到内存中,因此您不会看到双倍的运行时内存使用情况。此外,如果您的二进制文件包含大量相同的静态数据,这将压缩得非常好,这意味着您可以压缩通用二进制存档,并且与其中一个相比,只会看到很小的增长。通常,使用通用协议通过网络传输文件时会自动压缩。

因此,实际上,双倍文件大小唯一重要的是它在用户计算机上占用的磁盘空间量。

如果这是不可接受的,您将需要在运行时加载数据。像这样的东西:

let mut file = File::open("game.dat")?;
let mut data = Vec::new();
file.read_to_end(&mut data)?;
© www.soinside.com 2019 - 2024. All rights reserved.