有人知道如何使用GCC将任何资源文件静态编译成可执行文件或共享库文件吗?
例如,我想添加永远不会更改的图像文件(如果更改了,我就必须替换该文件),并且不希望它们在文件系统中随处可见.
如果这是可能的(我认为这是因为Visual C++对Windows也可以这样做),我如何加载存储在自己的二进制文件中的文件?可执行文件是否自行解析、找到文件并从中提取数据?
也许GCC有一个选项我还没见过.使用搜索引擎并没有真正说出正确的东西.
我需要它来为共享库和普通ELF可执行文件工作.
有人知道如何使用GCC将任何资源文件静态编译成可执行文件或共享库文件吗?
例如,我想添加永远不会更改的图像文件(如果更改了,我就必须替换该文件),并且不希望它们在文件系统中随处可见.
如果这是可能的(我认为这是因为Visual C++对Windows也可以这样做),我如何加载存储在自己的二进制文件中的文件?可执行文件是否自行解析、找到文件并从中提取数据?
也许GCC有一个选项我还没见过.使用搜索引擎并没有真正说出正确的东西.
我需要它来为共享库和普通ELF可执行文件工作.
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
并不是很好,当然你可以在任何可以使用迭代器的地方使用指针.
如果你在automake上使用这个,别忘了 Select set BUILT_SOURCES.
这样做的好处是: