LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: taurusivy

请问这是什么问题呢:链接第三方程序库时出错说浮点类型不匹配

[复制链接]
 楼主| 发表于 2006-12-6 12:38:43 | 显示全部楼层
我在想会不会是我使用的2.95.3版本的编译器太老了,不支持softfloat,或者我在重新制作时遗漏了什么重要环节。
回复 支持 反对

使用道具 举报

发表于 2006-12-6 13:30:17 | 显示全部楼层
Post by taurusivy
请问,arm-elf-tools可以用在我们的环境中么?它与arm-linux-tools相比除了程序格式之外还有什么重大的差异么?另外,想问一下,为什么只在编译的时候添加-msoft-float,而在链接的时候却不用呢?

我觉得两者没什么差别,两者可以互换着用;-msoft-float是gcc选项,不是ld选项。
Post by taurusivy
在makefile中的编译指令(如$(CC) $(CFLAGS) -c $< -o $@)中显式地写出了CFLAGS,那是否还需要显式指明$(ASFLAGS)?可以给出您当时使用的makefile么?

需要,gcc调用gas时可要传的参数由ASFLAGS定义;我的Makefile和上面我修改后的你的Makefile基本一样。
Post by taurusivy
我在想会不会是我使用的2.95.3版本的编译器太老了,不支持softfloat,或者我在重新制作时遗漏了什么重要环节。

可能吧,我没细研究,我的gcc版本是4.1.1。

把你修改后的Makefile和相应的出错信息,一并帖出来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-6 21:02:21 | 显示全部楼层
需要,gcc调用gas时可要传的参数由ASFLAGS定义;我的Makefile和上面我修改后的你的Makefile基本一样。

可能我没用说清楚,我所说的“显式指定”是指在编译命令中比如:
$(CC) $(CFLAGS) -c $< -o $@   中添加$ASFLAGS参数,变为类似这样:
$(AS) $(ASFLAGS) xxxx 这样的形式呢?
如果需要,应该怎样来写呢?谢谢~!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-6 21:28:38 | 显示全部楼层
可能吧,我没细研究,我的gcc版本是4.1.1。

把你修改后的Makefile和相应的出错信息,一并帖出来。

我只贴了Makefile中的主要部分。

  1. CC = arm-linux-gcc
  2. #OurLib是第三方厂商的程序库
  3. LINK = -L. -lOurLib -lm -lpthread
  4. INCDIR=/path/to/cross/headers
  5. CFLAGS = -g -msoft-float -c
  6. ASFLAGS = -mno-fpu
  7. OBJS=object.o prog1.o
  8. TAR=test

  9. $(TAR):$(OBJS)
  10.         $(CC) -o $@ $^ $(LINK)
  11. object.o:some dependencies
  12.         $(CC) $(CFLAGS)  $< -o $@
  13. prog1.o:some dependencies
  14.         $(CC) $(CFLAGS)  $< -o $@  
复制代码

错误没有改变:

  1. arm-linux-gcc -g  -msoft-float -c prog1.c -o prog1.o
  2. compiling binary object.o ......
  3. arm-linux-gcc -g  -msoft-float -c object.c -o object.o
  4. linking object ......
  5. arm-linux-gcc -o target prog1.o object.o -L. -lOurLib -lm -lpthread  
  6. /usr/local/arm/2.95.3/arm-linux/bin/ld: Error: _fixunsdfsi.o uses hard floating point,
  7. whereas object(我们的程序) uses soft floating point
  8. File format not recognized: failed to merge target specific data of file
  9. /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/libgcc.a(_fixunsdfsi.o)
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-12-7 12:10:02 | 显示全部楼层

  1. arm-linux-gcc -o target prog1.o object.o -L. -lOurLib -lm -lpthread  
  2. /usr/local/arm/2.95.3/arm-linux/bin/ld: Error: _fixunsdfsi.o uses hard floating point,
  3. whereas object(我们的程序) uses soft floating point
  4. File format not recognized: failed to merge target specific data of file
  5. /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/libgcc.a(_fixunsdfsi.o)
复制代码

似乎是说你的libgcc.a是用Hard FP编译的,而你的程序是用Soft FP编译的,两者不匹配,那么,你要么重编译一下libgcc,要么使用Hard FP编译你的程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-7 12:17:32 | 显示全部楼层
Post by LYOO

  1. arm-linux-gcc -o target prog1.o object.o -L. -lOurLib -lm -lpthread  
  2. /usr/local/arm/2.95.3/arm-linux/bin/ld: Error: _fixunsdfsi.o uses hard floating point,
  3. whereas object(我们的程序) uses soft floating point
  4. File format not recognized: failed to merge target specific data of file
  5. /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/libgcc.a(_fixunsdfsi.o)
复制代码

似乎是说你的libgcc.a是用Hard FP编译的,而你的程序是用Soft FP编译的,两者不匹配,那么,你要么重编译一下libgcc,要么使用Hard FP编译你的程序。


是啊,刚开始我就说了:怀疑是arm-linux-tools中的libgcc和自己程序的浮点类型不匹配。
所以自己重新编了一遍,但是错误没有变。
arm9上面没有硬浮点,所以肯定是不能用hard fp编译的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表