在使用数学库的C语言中执行文件

在使用数学库的C语言中执行文件,c,gcc,C,Gcc,我试图执行一个使用数学库的文件(更具体地说,它使用sqrt()函数)。所以我输入了gcc fileName.c-o fileName,它一直在说“未定义对'sqrt'的引用”。但是当我在谷歌搜索时,有人说在我的gcc通话结束时添加-lm,但我不明白为什么,有人能解释一下吗?谢谢 Sam添加-lm告诉gcc链接数学库 -l<name> link against the library with name <name> -l指向名为的库的链接 C编译有两个不同的步骤:编译到

我试图执行一个使用数学库的文件(更具体地说,它使用sqrt()函数)。所以我输入了gcc fileName.c-o fileName,它一直在说“未定义对'sqrt'的引用”。但是当我在谷歌搜索时,有人说在我的gcc通话结束时添加-lm,但我不明白为什么,有人能解释一下吗?谢谢


Sam

添加
-lm
告诉gcc链接数学库

-l<name> link against the library with name <name>
-l指向名为的库的链接

C编译有两个不同的步骤:编译到目标代码和链接。在编译到目标代码的过程中,文件按原样编译,任何外部符号(如通过包含头而获得的符号)都保留为“空白”。下一个阶段,链接,是填充这些空白的地方。对于许多库,您必须告诉gcc在哪里查找,因此您必须给出一个
-l
标志(在本例中,数学是
-lm

在调用链接器(ld)而不是编译器时,您严格地需要
-lm
,但gcc可以在编译后调用链接器并转发参数。在更复杂的项目中,可以单独调用链接器

描述了链接器的命令行选项,同时描述了编译器的命令行选项

选项
-l
namespec链接名为lib*namespec*.a的静态库,而
-l:
filename链接库文件名。支持另一种格式
--library=
namespec或
--library=
文件名


-lm
链接libm.a-数学库。标准库的非数学部分在libc.a中,但这通常是默认链接的,因此没有明确指定。

gcc
在链接时默认不包含数学函数
-l
是一个链接器选项,
m
是库名。@marounnaroun:将答案作为答案而不是注释发布。这绝对是一个答案。