我制作的一个小程序包含很多小的位图和声音片段,我希望将它们包含到二进制文件本身中(它们需要存储器映射)。在MS PE/COFF标准中,有关于如何包含具有良好文件系统层次结构的资源(.rsrc部分)的具体描述。我在Linux ELF规范中没有找到类似的东西,因此我认为可以自由地包含这些资源。将资源添加到ELF对象,分组在一个部分
我想要实现的是,我可以在每个资源的开头只包含一个带有符号名称的ELF部分中的所有资源(以便我可以从我的C代码中解决它们)。我现在正在做的是使用具有以下布局的小NASM文件:
SECTION .rsrc
_resource_1:
incbin "../rsrc/file_name_1"
_resource_1_length:
dw $-resource_1
_resource_2:
incbin "../rsrc/file_name_2"
_resource_2_length:
dw $-resource_2
...
我可以很容易地组装这可以用我的C代码链接的ELF对象。但是,我不喜欢使用assembly,因为这会使我的代码与平台相关。
什么是实现相同结果的更好方法?
这个问题已经被问过计算器,但所提出的解决方案并不适用于我的情况:在C代码十六进制数组是不是真的C/C++ with GCC: Statically add resource files to executable/library 包括资源:
- 提出了相应的解决办法因为它将代码和数据混合在一个部分中。 (此外,这也不实用,因为一旦它们转换为阵列,我无法预览资源)
- 在每个资源上都使用
objcopy --add-section
,但每个资源都有它自己的部分(包括头部和所有这些部分)。这似乎有点浪费,因为我有大约120个文件(每个+/- 4K)。
“__section”GCC关键字可以与提议的包含十六进制数组的解决方案一起使用。通过在构建环境中使“数组”文件依赖于它们的二进制“父母”,您仍然可以预览文件。 –