如何在程序中包含数据对象文件(图像等)并访问符号?

2024-03-27

我使用以下命令将几个资源文件转换为 .obj 文件objcopy我将它们与我的程序源代码链接起来。 我可以使用以下代码很好地访问程序中目标文件内的符号,但只能使用 GCC/G++ (Cygwin):

extern uint8_t data[]   asm("_binary_Resources_0_png_start");
extern uint8_t size[]   asm("_binary_Resources_0_png_size");
extern uint8_t end[]    asm("_binary_Resources_0_png_end");

该代码在 Visual Studio 中不起作用,可能是因为 VS 有它自己的__asm命令。 我想将我的程序资源(图像、着色器等)包含在我的最终可执行文件中.data部分通过链接它们。

但是如何在 VC++ 中访问目标文件中定义的符号呢? 我试过extern uint8_t _binary_Resources_0_png_start[] or extern "C" uint8_t _binary_Resources_0_png_start[]没有汇编命令,但我收到未解决的符号链接错误。


技巧与objcopy正如您所看到的,它并不是一种功能齐全的嵌入资源的方式,并且根本不可移植。

Microsoft 有自己的资源机制,因此如果您专门针对 Windows,则可以使用 Windows 资源文件和RCDATA资源 https://msdn.microsoft.com/en-us/library/windows/desktop/aa381039(v=vs.85).aspx.

如果你想要完全可移植的东西,你唯一的选择是将文件格式化为 C 源代码,例如

const uint8_t my_binary[] = { 0x00, 0x01, ... }

为此编写您自己的转换工具很简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在程序中包含数据对象文件(图像等)并访问符号? 的相关文章

随机推荐