Hello everybody

I'm trying to understand the process from "compiling - linking - executing" on a low level view.

Regarding static linking:

Is every address for function calls, global variables etc. known and set after the linking? I mean while link time, so before run time?

I know that there is a dynamic Linker/Loader, which is responsible for relocations. He works on run time, so when we actually want to start the executable and he will determine the missing addresses, because before runtime we could not know where the libraries are in the virtual address space.

But I thought the dynamic Linker (ld.so) is only needed when we used dynamic linking. But is he also used for static linking? Or are every addresses set after static linking?