4

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

4

2 回答 2

6

总之,由于历史原因,

中的函数位于stdio.hlibc,而中的函数位于math.hlibmlibc默认情况下是链接的,但libm不是。

于 2013-08-05T06:25:31.247 回答
3

有两种不同的东西:

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

还要考虑到有libc.so哪些libstdc.so总是链接到您的应用程序中。stdio.h在这些库中可以找到函数和其他几个函数的代码stdlib.h- 因此,它总是包含在内。

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

于 2013-08-05T06:23:51.533 回答