taurusivy 发表于 2006-11-30 12:57:53

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

我们在程序中用到第三方的函数,所以需要链接第三方厂商提供的程序库(-l3rdPartyLib),但是在链接时交叉编译器报错,说libgcc.a中的一些文件使用的浮点类型与我们自己程序(object)使用的浮点类型不匹配。具体信息如下所示:
compiling binary prog1.o ......
arm-linux-gcc -g -c prog1.c -o prog1.o
compiling binary object.o ......
arm-linux-gcc -g -c object.c -o object.o
linking object ......
arm-linux-gcc -o target prog1.o object.o -L. -l3rdPartyLib -lm -lpthread
/usr/local/arm/2.95.3/arm-linux/bin/ld: Error: _fixunsdfsi.o uses hard floating point, whereas object uses soft floating point
File format not recognized: failed to merge target specific data of file /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/libgcc.a(_fixunsdfsi.o)

请问各位这是什么原因呢?之前因为看到错误信息中有(/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/libgcc.a(_fixunsdfsi.o)),我怀疑是交叉编译器对软浮点不支持的原因,但是自己编写了一个小的含有浮点运算的测试程序用开发板自带现成cross-2.95.3编译器编译之后可以正常运行在开发板上。

所以我就很困惑了——这到底是否是交叉编译器不支持软浮点运算的问题呢?

后来自己手工编译了一个交叉编译器工具链,在编译时添加了一些选项参数(如--with-float=soft,--enable-softfloat等)来支持软浮点运算,但是后来证明次编译器制作的有问题,而且链接第三方程序库时还是有浮点类型不匹配的错误,就没有继续尝试。

现在我自己应该以怎样的思路来解决这个问题了,如果是因为不支持软浮点运算,那为什么可以在开发板上跑浮点运算测试程序呢?如果支持软浮点,为什么libgcc.a中的目标文件为什么总是说使用的是硬浮点呢?请各位高手指点,谢谢~!

附:我们使用的交叉编译环境:
宿主系统:rh9/Ubuntu/Debian都试过了
目标板处理器:ARM9 (s3c2410x) 有mmu
目标操作系统:mizi 公司的arm linux
交叉编译器:开发板自带的cross-2.95.3
页: [1]
查看完整版本: 请问这是什么问题呢:链接第三方程序库时出错说浮点类型不匹配