有人知道如何使用GCC将任何资源文件静态地直接编译到可执行文件或共享库文件中吗?
例如,我想要添加永不更改的图像文件(如果更改,则无论如何我都必须替换该文件),并且不希望它们位于文件系统中。
如果这是可能的(我认为是因为Windows的Visual C ++也可以这样做),如何加载存储在自己的二进制文件中的文件?可执行文件会自行解析,查找文件并从中提取数据吗?
也许我还没有看到GCC的选择。使用搜索引擎并没有真正吐出合适的东西。
我需要此功能才能用于共享库和普通的ELF可执行文件。
任何帮助表示赞赏
使用imagemagick:
convert file.png data.h
给出类似的内容:
/* data.h (PNM). */ static unsigned char MagickImage[] = { 0x50, 0x36, 0x0A, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4D, 0x50, 0x0A, 0x32, 0x37, 0x37, 0x20, 0x31, 0x36, 0x32, 0x0A, 0x32, 0x35, 0x35, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, ....
为了与其他代码兼容,您可以使用fmemopen“常规” FILE *对象,也std::stringstream可以使用iostream。std::stringstream但这并不是很好,您当然可以在可以使用迭代器的任何地方使用指针。
fmemopen
FILE *
std::stringstream
iostream
如果您将此参数与automake一起使用,请不要忘记适当地设置BUILT_SOURCES。
这样做的好处是: