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

Need to use extra option while compiling c code which includes <math.h>

每当我将 math.h 包含到我的 c 代码中时,如果没有 -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 库。我必须确定它 运行 在我老师的电脑上没有任何错误。

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

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