You are missing the fact that simply including a header does not tell the compiler anything about where the actual implementation (definition) of things declared in the header is.
They can be in the C file next to the one that include does, they can come from a pre-compiled static link library or a dynamic library loaded by the system linker when reading your executable file, or they can run (for example, the dlopen() function on Linux, eg).
C is not like Java, there is no implicit rule, because only because the C file contains a specific header, the compiler must also do something to โmagicallyโ find an implementation of the things declared in the header. You have to say it.
source share