我很困惑为什么你必须输入-lm来正确地将数学链接到你的代码,但是不必为stdio做同样的事情。我刚刚开始使用C,所以如果这是一个愚蠢的问题,或者我错过了一些明显的东西,我道歉。
答案 0 :(得分:5)
简而言之,由于历史原因,
stdio.h
中的功能位于libc
,而math.h
中的功能位于libm
。 libc
默认是关联的,但libm
不是。
答案 1 :(得分:3)
有两件事:
stdio.h
和math.h
) - 它们只包含函数原型和一些定义和数据; 源代码中 #include
libm.so
) - 它们包含二进制代码,已链接回到您的应用程序中(二进制代码)。此外,对于名为libname.so
的库,链接器标志为-lname
- 对于libm.so
,标志为-lm
。还要考虑到libc.so
和libstdc.so
始终与您的应用程序相关联。 stdio.h
和stdlib.h
以及其他几个函数的代码可以在这些库中找到 - 因此,它总是包含在内。
.so
文件等)。