<stdio.h> vs <math.h> - 为什么要链接一个而不是另一个?</math.h> </stdio.h>

时间:2013-08-05 06:22:09

标签: c

我很困惑为什么你必须输入-lm来正确地将数学链接到你的代码,但是不必为stdio做同样的事情。我刚刚开始使用C,所以如果这是一个愚蠢的问题,或者我错过了一些明显的东西,我道歉。

2 个答案:

答案 0 :(得分:5)

简而言之,由于历史原因,

stdio.h中的功能位于libc,而math.h中的功能位于libmlibc默认是关联的,但libm不是。

答案 1 :(得分:3)

有两件事:

  • 头文件(stdio.hmath.h) - 它们只包含函数原型和一些定义和数据; 源代码中 #include
  • 图书馆(libm.so) - 它们包含二进制代码,已链接回到您的应用程序中(二进制代码)。此外,对于名为libname.so的库,链接器标志为-lname - 对于libm.so,标志为-lm

还要考虑到libc.solibstdc.so始终与您的应用程序相关联。 stdio.hstdlib.h以及其他几个函数的代码可以在这些库中找到 - 因此,它总是包含在内。

PS:我在这里假设Linux / UNIX,因此名称非常具体。在Windows上,事情很相似,但有其他名称(DLL而不是.so文件等)。