我正在寻找一种方法来轻松地将任何外部二进制数据嵌入到由 GCC 编译的 C/C++ 应用程序中。
我想做的一个很好的例子是处理着色器代码——我可以把它保存在像 const char* shader = "source here";
这样的源文件中,但这是非常不切实际的。
我希望编译器为我做这件事:在编译(链接阶段)时,读取文件“foo.bar”并将其内容链接到我的程序,这样我就可以从代码。
对于我想作为单个 .exe 文件分发的小型应用程序可能很有用。
GCC 支持这样的东西吗?
原文由 Kos 发布,翻译遵循 CC BY-SA 4.0 许可协议
有几种可能性:
bin2c
/bin2h
实用程序将任何文件转换为字节数组( 在代码中嵌入图像,不使用资源部分或外部图像)更新:这是一个更完整的示例,说明如何使用
ld -r -b binary
将数据绑定到可执行文件中:更新 2 - 获取资源大小:我无法正确读取 _binary_foo_bar_size。在运行时,gdb 使用
display (unsigned int)&_binary_foo_bar_size
向我显示文本资源的正确大小。但是将其分配给变量总是会给出错误的值。我可以通过以下方式解决此问题:这是一种解决方法,但效果很好并且不太难看。