我需要的工具相当于:
$ echo 'char bar[] = {65, 66, 67};' >foo.c
$ gcc -c foo.c
我有一个多兆字节的二进制文件要放到bar
数组中,我需要它而不创建.c
文件:我希望创建.o
文件直接来自二进制文件。另一种选择可以是创建.s
或.S
文件,但我也想避免这种情况。是否有 binutils 等工具可以完成这项工作?
9 MB二进制文件的更新:gcc
段错误。 as
有效,但速度很慢,而临时.s
文件太大。
答案 0 :(得分:1)
您可以使用objcopy --add-section创建包含文件内容的部分。我认为您需要使用链接描述文件添加指向新部分开头的符号。
答案 1 :(得分:0)
很长一段时间,最简单的解决方案是创建.s
或.S
文件。
binutils 不包含任何有用的内容。
有一个快速的两步技巧,使用很少的内存:
步骤1.创建并编译包含正确大小符号的.c文件,但它具有短签名而不是真实的长数据。它应该看起来像:
const char hi[1234567] = "SIGNATURE";
const char *hi_end = hi + sizeof(hi) / sizeof(char);
步骤2.找到编译器生成的.o文件中的字节SIGNATURE
,并将其(以及以下'\0'
s)替换为真实二进制数据文件中的数据。