I guess my question is very straightforward, I cannot see the whole picture when using dynamic linking (either load-time or run-time) on programs since I wonder how the linker behaves at compile time when it sees unresolved references and do not find any definitions for them (cause they are on the dll files), but anyway the program compiles fine, even when there are references that will be resolved until run-time.
It is supposed the linker needs to resolve every reference at compile time in order to be okay (as it happens with static-linking), so when working when dll files, in some way, the linker says it is okay to leave those references unresolved to be resolved after on run-time (I guess we as programmers tell the linker to think like that with code, like saying some functions are on dll files as we say the compiler some functions exist somewhere when using forward-declarations).
Can some one explain me what is the step by step process for how the linker behaves at compile time when it sees there are external references to dll files for both load-time and run-time dynamic linking strategies?
In particular when working with dll files on C++, so I could understand what pieces of code tell the linker to behave like that.
Sidenote:
I already made my research online on microsoft docs and other sites but I did not understand everything at all, so I turned here.