这个问题已经在这里有一个答案:
我无法找到为什么gcc
需要-lm
为math.h
功能,但需要-l
或stdio
功能没有任何stdlib
文档。为什么有些功能需要包括与-l
gcc
命令选项,和别人不要求-l
选项?有什么想法吗?
有一些这会直接默认链接库。
一个用于gcc
这些默认库是libc.a
(静态)或libc.so
(动态)(GNU standard C library),它包含printf()
和scanf()
家庭,包括其他人,在原型或stdio.h
的stdlib.h
的定义。
现在,为了回答你的问题,根据wikipedia article
在FreeBSD和Linux,[8]的数学函数(如在
math.h
声明)被分别在数学库libm
捆绑在一起。如果其中任何一个被使用,该连接器必须给出指令-lm
。
如果你想明确地检查有关库过得去deafult连接,你需要使用-v
选项进行检查。您也可以通过-Wl,--verbose
选项,以获得更详细的输出。
如果你想限制默认的链接,你可以利用-nostdlib
开关。