如何为 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 指定架构?的主要内容,如果未能解决你的问题,请参考以下文章

将镶木地板文件读入数据框时如何为文件夹结构指定架构[重复]

如何为gcc指定默认的全局变量对齐?

Bigquery API:如何为 load_table_from_storage 调用提供架构

如何为复杂的 json 文档定义 avro 模式?

如何为@Valid 指定验证组?

如何为子文档创建 mongoDb 架构