问题:
在由以下代码编译的 C/C 应用程序中嵌入外部二进制数据GCC,特别是着色器代码,可作为单个可执行文件更有效地分发
解决方案:
GCC 提供了两种解决方案:
ld -r -b binary -o binary.o foo.bar # Then link in binary.o
此命令将文件 foo.bar 转换为可以链接到程序中的对象文件(binary.o)。
这些实用程序将任何文件转换为字节数组,然后可以将其包含在程序中。
更新的示例:
#include <stdio.h> extern char _binary_foo_bar_start[]; extern char _binary_foo_bar_end[]; int main(void) { // Get the resource size (workaround) unsigned int iSize = (unsigned int)(&_binary_foo_bar_end - &_binary_foo_bar_start); printf("Resource size: %u\n", iSize); printf("Address of start: %p\n", &_binary_foo_bar_start); printf("Address of end: %p\n\n", &_binary_foo_bar_end); // Dump resource contents for (char* p = _binary_foo_bar_start; p != _binary_foo_bar_end; ++p) { putchar( *p); } return 0; }
此示例使用基于 ld 的解决方案将文件 foo.bar 嵌入到可执行文件中。然后,它使用解决方法检索资源大小,并将资源内容转储到控制台。
以上是如何将资源(例如着色器代码)嵌入到 GCC 可执行文件中?的详细内容。更多信息请关注PHP中文网其他相关文章!