【发布时间】:2013-08-05 18:43:05
【问题描述】:
我很困惑为什么你必须输入 -lm 才能正确地将数学链接到你的代码,但不必对 stdio 做同样的事情。我才刚刚开始使用 C,所以如果这是一个愚蠢的问题或者我遗漏了一些明显的东西,我深表歉意。
【问题讨论】:
-
*.h文件是头文件,头文件没有链接,头文件是includeed!
标签: c
我很困惑为什么你必须输入 -lm 才能正确地将数学链接到你的代码,但不必对 stdio 做同样的事情。我才刚刚开始使用 C,所以如果这是一个愚蠢的问题或者我遗漏了一些明显的东西,我深表歉意。
【问题讨论】:
*.h文件是头文件,头文件没有链接,头文件是includeed!
标签: c
总之,由于历史原因,
stdio.h 中的函数在libc 中,而math.h 中的函数在libm 中。 libc 默认链接,libm 没有链接。
【讨论】:
libc 中的代码,但只有少数应用程序需要libm 中的代码。
有两种不同的东西:
stdio.h和math.h)——它们只包含函数原型和一些定义和数据;它们是您的源代码中的#included
libm.so) - 它们包含二进制代码,这些代码将链接回您的应用程序(二进制代码)。此外,对于名为libname.so 的库,链接器标志是-lname - 对于libm.so,标志是-lm。还要考虑到libc.so 和libstdc.so 始终链接到您的应用程序。在这些库中可以找到 stdio.h 和 stdlib.h 和其他几个函数的代码 - 因此,它总是包含在内。
PS:我假设这里是 Linux/UNIX,因此名称非常具体。在 Windows 上,情况类似,但名称不同(DLL 而不是 .so 文件等)
【讨论】:
libm.so、libc.so 等名称是非常特定于系统的。但是使用-lm 链接数学库的要求也是如此。