为什么在Math.h中调用函数时出现链接错误?
时间:2020-03-06 14:26:46 来源:igfitidea点击:
尝试在math.h
中调用函数时,出现类似以下的链接错误
undefined reference to sqrt
但是我正在做一个#include <math.h>
我正在使用gcc并进行如下编译:
gcc -Wall -D_GNU_SOURCE blah.c -o blah
链接器为什么找不到sqrt的定义?
解决方案
我们需要显式链接数学库。在传递给gcc的标志中添加-lm
,以便链接器知道链接libm.a
调用gcc时,将-lm添加到命令中:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm
这将告诉链接器链接到数学库。包括math.h将告诉编译器存在像sqrt()这样的数学函数,但是它们在单独的库中定义,链接器需要将其与可执行文件一起打包。
正如FreeMemory指出的那样,该库称为libm.a。在类Unix系统上,库的命名规则是lib [blah] .a。然后,如果要将它们链接到可执行文件,请使用-l [blah]。