如何在编译时控制.o文件的格式

发布于 2022-07-22 01:06:40 字数 76 浏览 13 评论 7

一般使用cc编译源文件时均采用系统默认的elf文件格式,有没有办法控制编译后的文件格式,比如编译成elf32-big,elf32-little格式等等。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

以酷 2022-07-22 17:03:44

我尝试用objcopy -O elf32-big filt.o filt_1.o直接转换,但是提示错误如下:
Unable to change endianness of input file(s)
用objcopy -O srec filt.o filt_1没有问题,不知道为什么?

调妓 2022-07-22 16:43:03

多谢各位的答复,但是按照这个方法作了不行哦,另外-mbig-endian参数是ARM选项用的,好像不支持。
我把具体情况说一下,便于大家解答,
这里的源程序为.S的X86汇编文件,在redhat9下利用gcc 3.2.2编译该文件,命令大致如下:gcc *****(若干参数)  -o filt.o filt.S,编译成功,
然后我使用objdump -f filt.o查看结果为:
filt.o:              file format elf32-i386
architecture:  i386等等
而我用相同的命令gcc *****(若干参数)  -o filt.o filt.c编译c源代码文件成功后,
用objdump -f filt.o查看结果为:
filt.o:              file format elf32-big
architecture:  UNKNOWN等等
由于在宿主机上开发应用程序patch到内核上,其中有几个源文件用了x86汇编语言编写,在宿主机上完全可以应用,但是现在要移植到powerpc系列的主板上,结果就出现了在交叉编译时报:不支持elf32-little格式到elf32-powerpc格式重定位连接,因此这里
才有上面的问题问大家。
咨询了一下有关人士,已知的解决方法是重新用powerpc汇编代码重写汇编程序,这个相当麻烦,而且宿主机这边要调试又怎么办?
不知道各位知道有没有转换工具或其他方法可以解决这个问题

山人契 2022-07-22 16:15:37

还要改ld script,也太麻烦了,而且不通用,还不如在编译行里面,加上相应的编译选项:
比如我们只要生成.o文件,则加上-c选项

如果我们想要大端/小端,则加上 -mlittle-endian, -mbig-endian

仙气飘飘 2022-07-22 16:10:38

原帖由 slackren 于 2006-4-6 11:17 发表

如何设定?比如我需要编译为elf32-big格式,我查了帮助,没有看到相关的选项,请问哪里有比较详细的说明,谢谢。

ld -V
查看你机器上的的ld所能generate的二进制文件格式。  下面是man ld的内容:
      -memulation
           Emulate the emulation linker.  You can list the available emulations with  the  --verbose
           or -V options.

           If  the  -m option is not used, the emulation is taken from the "LDEMULATION" environment
           variable, if that is defined.

           Otherwise, the default emulation depends upon how the linker was configured.

邮友 2022-07-22 14:15:38

原帖由 obrire 于 2006-4-5 23:00 发表

当然可以,修改LDFLAGS

如何设定?比如我需要编译为elf32-big格式,我查了帮助,没有看到相关的选项,请问哪里有比较详细的说明,谢谢。

指尖凝香 2022-07-22 11:48:08

原帖由 obrire 于 2006-4-5 23:00 发表

当然可以,修改LDFLAGS

大侠有自己写过ld script吗? 我想学学, 可只能看info手册, 好杂啊

一指流沙 2022-07-22 10:33:05

原帖由 slackren 于 2006-4-5 22:50 发表
一般使用cc编译源文件时均采用系统默认的elf文件格式,有没有办法控制编译后的文件格式,比如编译成elf32-big,elf32-little格式等等。

当然可以,修改LDFLAGS

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文