0

每当我将 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 库而发生的。我必须确保它会在我的教师计算机上运行而不会出现任何错误。

4

1 回答 1

1

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

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

于 2020-03-26T16:54:55.967 回答