I don't know why this article is going so complex. When we use a function or object that we have only its declaration in a header file and not its definition. Compiler also doesn't have its definition. Compiler generates an .obj file that has external references in it. In this time we have some obj files that are passed to the linker. Linker sees the external references and searches through all libs an objs to find the symbols needed. Now we have three conditions:
1> Linker finds only one object with that name and puts it in our obj
2> Linker can't find such object. Unresolved External Symbol error is the result.
3> Linker finds more than one object with that name. An error again, Duplicate definition.

After this if no error was generated during linking phase, linker makes an exe or DLL file. Ready to execute.
Linking to DLLs are also done by linker.
Some macros or functions maybe defined in headers, so its to compiler to make them work not the linker.

Prelude, what should I do exactly?