在Math.h中调用函数时为什么会出现链接错误?

时间:2008-09-19 16:21:31

标签: math gcc linker

尝试调用math.h中的函数时,我收到如下链接错误

undefined reference to sqrt

但我正在做#include <math.h> 我正在使用gcc并编译如下:

gcc -Wall -D_GNU_SOURCE blah.c -o blah

为什么链接器找不到sqrt的定义?

3 个答案:

答案 0 :(得分:7)

在调用gcc时向控制器添加-lm:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

这将告诉链接器链接数学库。包括math.h将告诉编译器像sqrt()这样的数学函数存在,但它们是在一个单独的库中定义的,链接器需要将其与您的可执行文件一起打包。

FreeMemory指出该库名为libm.a。在类Unix系统上,命名库的规则是lib [blah] .a。然后,如果要将它们链接到可执行文件,请使用-l [blah]。

答案 1 :(得分:2)

您需要明确链接数学库。将-lm添加到您传递给gcc的标志中,以便链接器知道链接libm.a

答案 2 :(得分:1)

-lm附加到gcc命令的末尾以链接数学库:

gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

要正确链接的东西,编译器标记的顺序很重要!具体而言,-lm应放置at the end of the line

如果您想知道为什么在使用C编译时需要包含math.h库,请查看此解释here