如何编译使用math.h的C程序?

我在math.h头文件中遇到了问题,当我使用平方根函数sqrt(d)时。但是我的编译器不支持这个。请给我提供一些建议解决这个问题。
我的Ubuntu版本是2012年。

2虽然我们喜欢编程问题,但问题必须与Ubuntu相关。你能详细说明这里的问题是什么吗?可以举例说明吗? - fossfreedom
这个命令是像sqrt((x2-x1)(x2-x1)+(y2-y1)(y2-y1))这样的...我的编译器不支持这个命令。 - shreya
1请回答时编辑您的问题。提供代码示例,编译方式,Ubuntu版本,编译器版本,是否尝试在其他编译器/发行版上进行此操作,以及出现了什么情况等信息。 - fossfreedom
1@shreya 如果你遇到了代码问题,提问时必须清楚描述具体的问题,并在问题中包含能够复现问题的有效代码。请参考SSCCE.org获取相关指导。 - Braiam
http://stackoverflow.com/questions/1033898/why-do-you-have-to-link-the-math-library-in-cu - Ciro Santilli OurBigBook.com
5我真的不认为这是离题的。在许多其他操作系统上,比如Windows,在C程序中使用数学库不需要传递特殊的链接器选项。甚至在一些类Unix的操作系统上,标准C库的实现也不需要这样做。这是许多用户在切换到像Ubuntu这样的GNU/Linux系统时面临的问题。我希望问题能够更好地描述具体的错误——如果我们最终认为这是离题的话,也许我们应该对其进行编辑——但这不是一个关于一般C编程的问题,而是一个关于如何在Ubuntu上使用gcc的问题。 - Eliah Kagan
2个回答

在您的gcc命令末尾添加-lm

对于像Ubuntu这样的GNU/Linux系统上的所有最新版本的GCC,当您使用数学库时,必须显式链接到它。它不会自动与标准C库一起链接。

如果您正在使用gccg++命令进行命令行编译,则可以通过在命令末尾放置-lm来实现此目的。

例如:gcc -o foo foo.c -lm


谢谢你的小费,伙计! - coterobarros

如果你要在LINUX中使用GCC或G++编译带有math.h库的C程序,你需要在编译命令后使用-lm选项。
gcc xyz.c -o xyz -lm

这里,

gcc 是编译器命令(编译器名称)
xyz.c 是源文件名。
-o 是一个选项,用于指定输出文件。
xyz 是输出文件的名称。
-lm 是一个选项,用于链接数学库(libm)。

要了解更多详细信息,请访问以下链接,其中包含完整的文章。
在Linux中使用math.h编译C程序。


1在链接命令之后,而不是编译命令。 (对于这种吹毛求疵的事情感到抱歉,但理解其他情况需要正确理解它)。 - mousomer
@mousomer 如何让它在Ubuntu 20.04上自动链接? - mr.loop