LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3126|回复: 3

编译错误:"undefined reference to 'sqrt'

[复制链接]
发表于 2009-1-17 01:47:30 | 显示全部楼层 |阅读模式
我的系统是ubuntu-8.10-desktop-amd64,我想用函数sqrt(),但是编译出错.代码如下:

#include <stdio.h>
#include <math.h>

int main()
{
    float fn, fres;
    double dn, dres;

    printf("Enter a float number: " );
    scanf("%f", &fn);
    fres = sqrtf(fn);
    printf("The result of sqrt(%f) = %f\n", fn, fres );

    printf("Enter a double number: ";
    scanf("%lf", &dn);
    dres = sqrt(dn);
    printf("The result of sqrt(%lf) = %lf\n", dn, dres );

    printf("The result of sqrt(2)=%f\n", sqrt(2) );
}

编译错误:
In function 'main':
trysqrt.c.text+0x51): undefined reference to 'sqrtf'
trysqrt.c.text+0xcc): undefined reference to 'sqrt'
我查看了/usr/include/math.h头文件,但是找不到sqrt()函数声明,请问这是怎么回事?
发表于 2009-1-17 09:30:27 | 显示全部楼层
没有头文件的问题,实际上是没有链接math数学库的问题。
gcc hello.c -lm
-lm就是链接到math库的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-17 10:27:56 | 显示全部楼层
谢谢! 问题解决. 但是我还是不明白.
Post by xiaoshao_0_0;1939017
没有头文件的问题,实际上是没有链接math数学库的问题。
gcc hello.c -lm
-lm就是链接到math库的问题。
回复 支持 反对

使用道具 举报

发表于 2009-1-19 12:39:56 | 显示全部楼层
首先要对编译有个了解,你写了一个程序,如果有头文件的话,就需要编译器指定这头文件对应的库文件,库文件一般都在/usr/lib目录下。
gcc默认指定的有几个库文件,比如libstd。
但是你所需要的math库不是gcc默认指定的,所以就需要你在编译的时候加上一个-lm选项。
-l是指定XXX库,m就指math库。
回复 支持 反对

使用道具 举报

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

本版积分规则

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