带有GCC的C / C ++:将资源文件静态添加到可执行文件/库
有人知道如何使用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
但这并不是很好,您当然可以在可以使用迭代器的任何地方使用指针。
如果您将此参数与automake一起使用,请不要忘记适当地设置BUILT_SOURCES。
这样做的好处是:
- 您得到了文本,因此可以在版本控制中进行合理的修补
- 它是便携式的,并且在每个平台上都有明确的定义
以上是 带有GCC的C / C ++:将资源文件静态添加到可执行文件/库 的全部内容, 来源链接: utcz.com/qa/408435.html