编译包含<math.h>的c代码时需要使用额外的选项

时间:2020-03-26 16:47:23

标签: c compiler-errors math.h math.sqrt

每当我在我的C代码中包含math.h时,如果没有-lm选项就无法编译。我收到此错误消息:

d.o: In function `refresh_position':
d.c:(.text+0x4df): undefined reference to `sqrt'
d.c:(.text+0x524): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

我可以只输入-lm来编译它,但是我的老师说,如果代码不起作用,我将从该作业中得到0分。我想知道是由于我的代码还是因为我的计算机或c库而发生此错误。我必须确保它可以在我的教师计算机上正常运行。

1 个答案:

答案 0 :(得分:1)

某些实现(例如gcc)默认情况下不链接数学库(在大多数* nix实现中称为libm.a),这就是为什么在构建代码时需要包括-lm的原因。

您的老师应该注意此类问题,并且只要您的代码正确使用sqrt和其他数学例程 (使用正确的类型(用于输入和输出),他或她应该能够构建您的代码,使其能够运行。