如何为 sde-objcopy 指定架构?
Posted
技术标签:
【中文标题】如何为 sde-objcopy 指定架构?【英文标题】:How to specify architecture for sde-objcopy? 【发布时间】:2011-09-20 02:13:39 【问题描述】:我需要使用 sde-objcopy 将图片转换为目标文件(.o),然后我可以在我们的无操作系统系统中使用这张图片。 我已经测试了 objcopy 命令,它在我的 PC(Fedora 12)上运行良好。例如,下面的命令会将 test.jpg 转换为 test.o。
objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o
这是我的问题:
一个。 sde-objcopy 没有“-B”选项来指定架构,但如果我没有指定架构,它将响应如下警告:
$ sde-objcopy -I binary -O elf32-little test.jpg test.o
sde-objcopy:警告:输出文件不能代表架构未知!
如何解决这个警告?
B。似乎 objcopy 使用文件名在目标文件中生成符号。如果我使用完整路径(如/home/owner/stdy/test.jpg
)作为objcopy的参数,它会生成长命名符号。有什么优雅的方法可以解决这个问题吗?
$ objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o
$ nm test.o
00000083 D _binary____stdy_test_jpg_end
00000083 A _binary____stdy_test_jpg_size
00000000 D _binary____stdy_test_jpg_start
$ objcopy -I binary -O elf32-i386 -B i386 test.jpg test.o
$ nm test.o
00000032 D _binary_test_jpg_end
00000032 A _binary_test_jpg_size
00000000 D _binary_test_jpg_start
【问题讨论】:
我在网上搜索了半天,发现sde-objcopy的版本是基于旧的gnu-toolchain code(05 april 2000, from man sde-objcopy),“-B " 选项被一个为 Redhat 工作的程序员添加到 objcopy 直到 2001 年。所以我忽略了这个警告。关于第二个问题,我找不到优雅的方法。 我发现了一个非常有用的 Linux 命令,它可以将任何文件转换为 .h 文件。这个头文件包含一个数组和一个整数,它是这个数组的长度。命令是:xxd -i test.jpg > test.h 【参考方案1】:你可以使用类似的东西:
# data.s
.section ".rodata"
.globl font_data_start, font_data_end
font_data_start:
.incbin "Zitz-Regular.ttf"
font_data_end:
.size font_data_start, font_data_end - font_data_start
然后访问程序中的内容:
/* prog.c */
extern const char font_data_start[], font_data_end[];
void function()
fwrite(font_data_start, font_data_end - font_data_start, 1, stdout);
【讨论】:
为提高您的帖子质量,请说明您的答案为何/如何解决问题。以上是关于如何为 sde-objcopy 指定架构?的主要内容,如果未能解决你的问题,请参考以下文章