首页 >后端开发 >C++ >如何将资源(例如着色器代码)嵌入到 GCC 可执行文件中?

如何将资源(例如着色器代码)嵌入到 GCC 可执行文件中?

Patricia Arquette
Patricia Arquette原创
2024-12-29 11:52:10855浏览

How to Embed Resources (e.g., Shader Code) into GCC Executables?

使用 GCC 将资源嵌入可执行文件

问题:

在由以下代码编译的 C/C 应用程序中嵌入外部二进制数据GCC,特别是着色器代码,可作为单个可执行文件更有效地分发

解决方案:

GCC 提供了两种解决方案:

  • 使用 ld 的功能将文件转换为对象:
ld -r -b binary -o binary.o foo.bar

# Then link in binary.o

此命令将文件 foo.bar 转换为可以链接到程序中的对象文件(binary.o)。

  • 使用 bin2c/bin2h实用程序:

这些实用程序将任何文件转换为字节数组,然后可以将其包含在程序中。

更新的示例:

#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)(&amp;_binary_foo_bar_end - &amp;_binary_foo_bar_start);

    printf("Resource size: %u\n", iSize);
    printf("Address of start: %p\n", &amp;_binary_foo_bar_start);
    printf("Address of end: %p\n\n", &amp;_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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn