Chinaunix

标题: 目标文件是大端的,但是编译器自带静态库是小端的,为之奈何? [打印本页]

作者: rocky1972    时间: 2009-01-08 16:56
标题: 目标文件是大端的,但是编译器自带静态库是小端的,为之奈何?
编译器是arm-elf-linux
需要用到__divsi3来做除法运算,工程需要编译成大端的,但是链接的静态库确实小段的,这种情况该如何处理 ?

谢谢
作者: MMMIX    时间: 2009-01-08 17:02
为之奈何 -> 如之奈何
作者: cjaizss    时间: 2009-01-08 17:03
把库重新编译一遍
作者: rocky1972    时间: 2009-01-08 17:08
原帖由 MMMIX 于 2009-1-8 17:02 发表
为之奈何 -> 如之奈何



CPU必须工作在big_endian下
作者: rocky1972    时间: 2009-01-08 17:14
原帖由 cjaizss 于 2009-1-8 17:03 发表
把库重新编译一遍


您是说自己制作toolchain ?
作者: alexhappy    时间: 2009-01-08 18:09
手动转换
作者: rocky1972    时间: 2009-01-08 18:36
原帖由 alexhappy 于 2009-1-8 18:09 发表
手动转换



啊。。。。。。。。。。

小弟孤陋寡闻,请大哥指点一下
作者: eveson    时间: 2009-01-08 18:45
能不能转换处理下?
作者: prc    时间: 2009-01-08 19:19
1. ar x LIB
2. 自己写个程序把每个.o的.text, .data, .rodata段的数据从小端变成大端
3. 重新打包

既然编译器能编译大端的程序,为何只提供小端的库呢?

[ 本帖最后由 prc 于 2009-1-8 19:21 编辑 ]
作者: rocky1972    时间: 2009-01-08 22:45
原帖由 prc 于 2009-1-8 19:19 发表
1. ar x LIB
2. 自己写个程序把每个.o的.text, .data, .rodata段的数据从小端变成大端
3. 重新打包

既然编译器能编译大端的程序,为何只提供小端的库呢?




>>>>既然编译器能编译大端的程序,为何只提供小端的库呢?

这个我也有点纳闷,也许有,但是自己现在还不知道在哪?

静态库编译的时候就已经确定是大端还是小端了,个人觉得应该是这样。
作者: MMMIX    时间: 2009-01-09 00:01
原帖由 rocky1972 于 2009-1-8 22:45 发表


静态库编译的时候就已经确定是大端还是小端了,个人觉得应该是这样。

动态库也一样。

btw,用的啥库?newlib?
作者: rocky1972    时间: 2009-01-09 08:53
原帖由 MMMIX 于 2009-1-9 00:01 发表

动态库也一样。

btw,用的啥库?newlib?



libgcc.a 中的__divsi3,编译器为arm-elf-gcc 2.95.3



>>>>动态库也一样。

对呀,想想动态库它肯定也是大小端是确定的,那链接大端的时候怎么搞?

[ 本帖最后由 rocky1972 于 2009-1-9 08:56 编辑 ]
作者: MMMIX    时间: 2009-01-09 09:30
原帖由 rocky1972 于 2009-1-9 08:53 发表



libgcc.a 中的__divsi3,编译器为arm-elf-gcc 2.95.3

libgcc 的话用 gcc -print-multi-lib 看看它都支持哪些选项。
作者: rocky1972    时间: 2009-01-09 10:57
原帖由 MMMIX 于 2009-1-9 09:30 发表

libgcc 的话用 gcc -print-multi-lib 看看它都支持哪些选项。



[bbsed]$arm-elf-gcc -print-multi-lib

.;
thumb;@thumb
作者: MMMIX    时间: 2009-01-09 12:09
原帖由 rocky1972 于 2009-1-9 10:57 发表



$arm-elf-gcc -print-multi-lib

.;
thumb;@thumb

oops

重新编译 toolchain 吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2