编译c代码时需要使用额外选项,其中包括<;数学h>;

编译c代码时需要使用额外选项,其中包括<;数学h>;,c,compiler-errors,math.h,math.sqrt,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就可以编译它,但我的老师说,如果代

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

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


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

如果您的老师使用数学库独立于标准库的其他部分的实现,她应该知道如何在需要时将其链接在一起。我认为,如果老师不知道如何使用她的工具(当然,除非假定是为独立环境编程),那么要求
pow()
sin()
的作业得0分是错误的。