Quoting Wikipedia regarding the Dynamic loading:
Dynamic loading is a mechanism by which a computer program can, at run time, load a library into memory, Unlike static linking and dynamic linking, dynamic loading allows a computer program to start up in the absence of these libraries.
So, correct me if I'm wrong, but in Dynamic loading, libraries are loaded explicitly via a Load-library function.
Whereas in Dynamic linking, loading and linking the shared libraries needed by an executable is postponed until run-time, the OS is responsible for copying the content of libraries from persistent storage to RAM.
Could you please still explain the differences between the dynamic linking and dynamic loading in simple words? I'm still confused.
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:
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."