主题 : 数学库lib.so调用,运行不正确 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3317
精华: 0
发帖: 2
金钱: 20 两
威望: 20 点
综合积分: 4 分
注册时间: 2009-01-05
最后登录: 2009-03-19
楼主  发表于: 2009-03-18 11:02

 数学库lib.so调用,运行不正确

今天开发中遇到了一个问题:程序中调用了数学库math.h,所以链接的时候也加上 -lm选项。
使用gcc本地编译,测试都通过。
但是,交叉编译(加上 -lm选项)下载到开发板之后,运行的结果就都是错误的,仔细查看:开发板中的 /lib目录下也有libm.so.6 数学库……
大侠求救……
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-03-19 07:58
源代码,编译步骤,运行结果...
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 3317
精华: 0
发帖: 2
金钱: 20 两
威望: 20 点
综合积分: 4 分
注册时间: 2009-01-05
最后登录: 2009-03-19
2楼  发表于: 2009-03-19 14:44

 回 1楼(kasim) 的帖子

在本地编译使用的是gcc,交叉编译我改为了arm-linux-gcc,,其他的库文件,链接编译选项则完全一致。
gcc本地编译链接后,运行都正确!
交叉编译arm-linux-gcc也没有任何的错误信息或者警告,就是下载到开发板之后,可以运行,并且不报错,就是运行结果不正确,开方函数sqrt(..)的结果均等于0.0000.乘方函数pow(..)的结果均等于1.0000
另外说明:主机本地的数据库为/lib/libm.so.6,目标板上面的数学库也是 /lib/libm.so.6.
简单起见,我把代码中最核心的抽取出来,如下:
#include<stdio.h>
#include<math.h>
void main()
{
double a=8.37456,b=0.0;
b=sqrt(a);
printf("sqrt(8.37456)=%f\n",b);
b=pow(a,2);
printf("pow(8.37456,2)=%f\n",b);
}
编译选项为: arm-linux-gcc -o mathtest main.c -lm
无任何警告信息或者错误,成功后将mathtest 下载到开发板,运行之,输出的结果(无错误警告信息)为:
sqrt(8.37456)=0.0000
pow(8.37456,2)=1.0000