在使用数学库的C语言中执行文件
我试图执行一个使用数学库的文件(更具体地说,它使用sqrt()函数)。所以我输入了gcc fileName.c-o fileName,它一直在说“未定义对'sqrt'的引用”。但是当我在谷歌搜索时,有人说在我的gcc通话结束时添加-lm,但我不明白为什么,有人能解释一下吗?谢谢在使用数学库的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编译有两个不同的步骤:编译到
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:将答案作为答案而不是注释发布。这绝对是一个答案。