我需要将图片转换为目标文件(.o)使用sde-objcopy,然后我可以在我们的no-os系统中使用这张图片。 我测试了objcopy命令,它在我的PC上运行良好(Fedora 12)。例如,下面的命令会将test.jpg转换为test.o。
objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o
以下是我的问题:
A 即可。 sde-objcopy没有“-B”选项来指定体系结构,但是如果我没有指定体系结构,它将响应这样的警告:
$ sde-objcopy -I binary -O elf32-little test.jpg test.o
sde-objcopy:警告:输出文件无法代表架构UNKNOWN!
如何修复此警告?
乙即可。似乎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
答案 0 :(得分:0)
您可以使用以下内容:
# 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);
}