6

尝试在 中调用函数时math.h,出现如下链接错误

undefined reference to sqrt

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

gcc -Wall -D_GNU_SOURCE blah.c -o blah

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

4

3 回答 3

8

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

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

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

于 2008-09-19T16:24:32.273 回答
3

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

于 2008-09-19T16:22:11.607 回答
2

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

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

为了正确链接事物,编译器标志的顺序很重要!具体来说,-lm应该放在行尾

如果您想知道为什么math.h在 C 中编译时需要包含该库,请在此处查看此说明。

于 2017-08-25T15:40:40.573 回答