是否有跨平台方法可以将资源嵌入到用 C++ 编写的二进制应用程序中? [复制]

2024-01-19

我试图将一些资源(图像、音乐和数据文件)捆绑到我的二进制应用程序(用 C++ 编写)中。

我希望将所有内容都包含在一个可执行文件中(这样我就可以发送(大)可执行文件并且它可以工作,不能删除任何资产)。

我看到 Visual Studio 和 Windows 有一个叫做资源文件 https://stackoverflow.com/questions/14418837/is-there-an-easy-way-to-add-images-into-an-exe-file看起来他们就是为了做到这一点而设计的。

然而,我感兴趣是否有一种跨平台的方式,或者,如果没有,Linux 相当于资源文件的方式是什么(如果有的话,提供我的任何 IDE 或编译器)。

我希望能够将整个程序包含在一个文件中,因此我对单独的资产或资源目录不感兴趣。

我找到了几个older https://stackoverflow.com/questions/5718119/c-how-to-add-raw-binary-data-into-source answers https://stackoverflow.com/questions/4158900/embedding-resources-in-executable-using-gcc但很难相信在 Linux 上没有一种现代的方法可以做到这一点。

看来解决方案是:

A.在Windows上使用资源文件

B. 使用将资源转换为 .c 字符数组并将其加载到 Linux 上的工具。

这真的是所需要的吗如果是这样:将此过程包含在跨平台构建周期中的最方便的方法是什么? CMAKE 是否可以在构建程序之前运行一些函数?


我见过人xxd|sed他们的二进制资源到Cconst uint8_t数组。它可以是 c++ 化的:

Resource1.h

#include <cstdint>
#include <array>
extern std::array<uint8_t, 1024> resource1;

Resource1.cc

#include "Resource1.h"
const std::array<uint8_t, 1024> resource1 = {
    0x42, 0x24, 0x18, ...
    ...
}

如果您不喜欢正则表达式,可以从这里开始:

hexdump file.bin | sed 's/^[0-9a-f]* \?//;s/ \?\([0-9a-f]\{2\}\) \?/0x\1, /g'

输出类似

0x5b, 0x6b, 0x32, 0x50, 0x69, 0x50, 0x53, 0x64, 0x61, 0x65, 0x63, 0x72, 0x52, 0x68, 0x73, 0x65, 
0x6f, 0x70, 0x73, 0x6e, 0x5d, 0x65, 0x3d, 0x20, 0x30, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有跨平台方法可以将资源嵌入到用 C++ 编写的二进制应用程序中? [复制] 的相关文章

随机推荐