免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3731 | 回复: 7
打印 上一主题 下一主题

如何在编译时控制.o文件的格式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-05 22:50 |只看该作者 |倒序浏览
一般使用cc编译源文件时均采用系统默认的elf文件格式,有没有办法控制编译后的文件格式,比如编译成elf32-big,elf32-little格式等等。

论坛徽章:
0
2 [报告]
发表于 2006-04-05 23:00 |只看该作者
原帖由 slackren 于 2006-4-5 22:50 发表
一般使用cc编译源文件时均采用系统默认的elf文件格式,有没有办法控制编译后的文件格式,比如编译成elf32-big,elf32-little格式等等。


当然可以,修改LDFLAGS

论坛徽章:
0
3 [报告]
发表于 2006-04-06 09:53 |只看该作者
原帖由 obrire 于 2006-4-5 23:00 发表


当然可以,修改LDFLAGS


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

论坛徽章:
0
4 [报告]
发表于 2006-04-06 11:17 |只看该作者
原帖由 obrire 于 2006-4-5 23:00 发表


当然可以,修改LDFLAGS

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

论坛徽章:
0
5 [报告]
发表于 2006-04-06 11:36 |只看该作者
原帖由 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.

论坛徽章:
0
6 [报告]
发表于 2006-04-06 12:53 |只看该作者
还要改ld script,也太麻烦了,而且不通用,还不如在编译行里面,加上相应的编译选项:
比如我们只要生成.o文件,则加上-c选项

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

论坛徽章:
0
7 [报告]
发表于 2006-04-06 17:06 |只看该作者
多谢各位的答复,但是按照这个方法作了不行哦,另外-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汇编代码重写汇编程序,这个相当麻烦,而且宿主机这边要调试又怎么办?
不知道各位知道有没有转换工具或其他方法可以解决这个问题

论坛徽章:
0
8 [报告]
发表于 2006-04-06 19:18 |只看该作者
我尝试用objcopy -O elf32-big filt.o filt_1.o直接转换,但是提示错误如下:
Unable to change endianness of input file(s)
用objcopy -O srec filt.o filt_1没有问题,不知道为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP