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

undefined reference to sqrt

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

gcc -Wall -D_GNU_SOURCE blah.c -o blah

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

有帮助吗?

解决方案

在调用gcc:
时将-lm添加到命令中 gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

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

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

其他提示

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

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

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

要正确链接的东西,编译器标记的顺序很重要!具体而言,math.h应该放在在行尾

如果您想知道为什么在C语言编译时需要包含<=>库,请查看此解释此处

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top