当试图调用函数在math.h
,我得到链接错误,如以下
undefined reference to sqrt
但是我做了#include <math.h>
我用gcc和编译如下:
gcc -Wall -D_GNU_SOURCE blah.c -o blah
为什么不能链接找到的定义sqrt
?
当试图调用函数在math.h
,我得到链接错误,如以下
undefined reference to sqrt
但是我做了#include <math.h>
我用gcc和编译如下:
gcc -Wall -D_GNU_SOURCE blah.c -o blah
为什么不能链接找到的定义sqrt
?
-lm添加到命令,当你调用gcc的:
GCC -Wall -D_GNU_SOURCE blah.c -o等等-lm
这会告诉链接与数学库链接。 包括math.h中会告诉大家,像开方运算功能()存在的编译器,但他们是在一个单独的库,该连接器需要与你的可执行文件包中定义的。
作为FreeMemory指出库称为libm.a。 在类Unix系统,命名程序库的规则是LIB [胡说] .A。 然后,如果你想将它们链接到您的可执行文件使用-l [等等。
你需要的数学函数库显式链接。 加入-lm
给你传递给GCC,这样的链接器知道链接的标志libm.a
追加-lm
海湾合作委员会命令将数学库链接的结尾:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm
对于要链接正确的事情,编译器标志事项的顺序! 具体而言, -lm
应放置在该行的末尾 。
如果你想知道为什么math.h
库需要用C编译时要不惜一切包括在内,看看这个解释在这里 。