我很困惑为什么你必须输入 -lm 才能正确地将数学链接到你的代码,但不必对 stdio 做同样的事情。我才刚刚开始使用 C,所以如果这是一个愚蠢的问题或者我遗漏了一些明显的东西,我深表歉意。
问问题
1966 次
2 回答
6
总之,由于历史原因,
中的函数位于stdio.h
中libc
,而中的函数位于math.h
中libm
。libc
默认情况下是链接的,但libm
不是。
于 2013-08-05T06:25:31.247 回答
3
有两种不同的东西:
- 头文件(
stdio.h
和math.h
)——它们只包含函数原型和一些定义和数据;它们#include
在您的源代码中 - 库 (
libm.so
) - 它们包含将链接回您的应用程序的二进制代码(二进制代码)。此外,对于名为链接器标志的库, -标志是.libname.so
-lname
libm.so
-lm
还要考虑到有libc.so
哪些libstdc.so
总是链接到您的应用程序中。stdio.h
在这些库中可以找到函数和其他几个函数的代码stdlib.h
- 因此,它总是包含在内。
PS:我假设这里是 Linux/UNIX,因此名称非常具体。在 Windows 上,情况类似,但名称不同(DLL 而不是.so
文件等)
于 2013-08-05T06:23:51.533 回答