Дилемма о разделяемых библиотеках в Unix

Если я создаю общую библиотеку (общий объект), я могу использовать ее двумя следующими способами:
Первый способ - использовать общую библиотеку, как если бы я использовал статическую библиотеку.

           #include "myLib.h"
           //...
           //afterwards I can use functions defined in mylib.h
           myFunction();

Второй способ использования общей библиотеки - это вызов функций API динамического загрузчика: dlopen , dlsym , и dlclose из dlfcn.h . Я бы использовал разделяемую библиотеку таким образом, например, когда хочу реализовать шаблон плагина. Листинг будет выглядеть так:

#include <dlfcn.h>

void  *myLib;                /*  Handle to shared lib file  */
void (*myFunction)();       /*  Pointer to loaded function  */

  //...

  //load shared object
  myLib = dlopen("/home/dlTest/myLib.so",RTLD_LAZY);
  dlerror();

  //get handle to function
  myFunction = dlsym( myLib, "myFunction");
  dlerror();

  //execute function
  (*myFunction)();

  //close lib
  dlclose(myLib);
  dlerror();

Теперь мой первый вопрос : в чем разница между этими двумя способами использования общего объекта с точки зрения времени загрузки? Используя общую библиотеку в первом случае, мы связываем / загружаем общую библиотеку в основное приложение во время загрузки, а во втором случае мы делаем то же самое во время выполнения?

Второй вопрос . Как называются эти два обычаев? Первая называется статически связанной общей библиотекой, а вторая - динамически подключаемой / загружаемой общей библиотекой?

Третий вопрос Создал ли я общую библиотеку без флага -fPIC (независимый от позиции код ), смогу ли я использовать его вторым способом?

Ура

6
задан dragan.stepanovic 12 December 2010 в 15:59
поделиться