我很困惑为什么你必须输入-lm来正确地将数学链接到你的代码,但是不必为stdio做同样的事情.我刚刚开始使用C,所以如果这是一个愚蠢的问题,我会道歉,或者我错过了一些明显的东西.
有两件事不同:
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文件等)