尝试在 中调用函数时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