You seem to be hung up on terminology. The term "dynamic linking" is a misnomer as to what actually happens.
Linkers generally process three types of files:
- Object Files
- Object Libraries
- Shared Libraries
An object library is just a file that contains other object files that can be extracted from it, so I will ignore that alternative.
An object file contains a table of global symbols defined by the file and a table of global symbols referenced by the file. The linker "links" the references in on file to the definitions in another file. It adds the code and data contents of the linked file to the executable (or shared library).
A shared library contains a table of universal symbols defined and universal symbols referenced by the library. A linker "links" global symbol references in object files to the shared library file. At the completion of linking, the executable (or shared library) knows what shared library file contains the symbol but does not know where the symbol is.
Sometimes, the process of linking such shared libraries is called "dynamic linking."
The executable has a table of global symbol references that have been mapped to universal symbols shared libraries.
When you run the executable, the program loader examines the executable fore shared libraries referenced. It will then (1) load the shared library; (2) read the library's table of universal symbols and look up the address of the referenced symbols; (3) fix up the references to those symbols in the executable.
Because the shared libraries can reference other shared libraries, this is a recursive process.
Sometimes this process of loading a program referencing shared libraries at run time is called "dynamic linking." (Now we have two definitions of the same term.)
Many operating system make the same system services used to load shared libraries and find addresses of universal symbols within shared libraries available to applications. At run time (after the application is loaded) the application can dynamically access a function or other universal symbol by (1) loading the shared library and (2) locating a desired symbol.
That is what you are calling "dynamic loading."