如果我包含<stdlib.h>
或包含<stdio.h>
在C程序中,则在编译时不必链接这些,但是我必须链接到<math.h>
,并-lm
与gcc一起使用,例如:
gcc test.c -o test -lm
这是什么原因呢?为什么我必须显式链接数学库,而不是其他库?
在功能stdlib.h
和stdio.h
在实现libc.so
(或libc.a
静态链接),它在默认情况下链接到你的可执行文件(好像-lc
被指定)。可以指示GCC避免使用-nostdlib
或-nodefaultlibs
选项进行此自动链接。
中的数学函数math.h
具有的实现libm.so
(或libm.a
用于静态链接),并且libm
默认情况下未链接。这种libm
/libc
分裂有历史原因,但没有一个非常令人信服。
有趣的是,C ++运行时libstdc++
需要libm
,因此,如果您使用GCC(g++
)编译C ++程序,则将自动获得libm
链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句