title: What is the difference between dynamic linking and dynamic loading
body: <p>As i understand 
  Dynamic loading means loading the library (or any other binary for that matter) into the memory during load or run-time. so in program below when dlopen() called dynamic loader will come in to picture and it will load the lib in to the memory if library is not loaded already.</p>
  
  <p>Dynamic linking refers to the linking that is done during load or run-time. and it resolves external references.
  So in program below dlsym() function will ask for cosine function and dynamic linking will come in picture and symbols will be resolved.</p>
  
  <pre><code>int main(int argc, char **argv) {
      void *handle;
      double (*cosine)(double);
      char *error;
  
      handle = dlopen ("/lib/libm.so.6", RTLD_LAZY);
      if (!handle) {
          fputs (dlerror(), stderr);
          exit(1);
      }
  
      cosine = dlsym(handle, "cos");
      if ((error = dlerror()) != NULL)  {
          fputs(error, stderr);
          exit(1);
      }
  </code></pre>