Если я создаю разделяемую библиотеку (разделяемый объект), я могу использовать ее двумя следующими способами:
Первый способ - использовать разделяемую библиотеку, как если бы я использовал статическую библиотеку.
#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
(независимый от кода) код, смогу ли я использовать ее другим способом?
Приветствия