динамически загружать статическую библиотеку? - PullRequest
9 голосов
/ 02 сентября 2010

Может ли статическая библиотека *.a в Linux динамически загружаться во время выполнения?
Я прочитал здесь , что

... как статические, так и общие библиотекиможно использовать в качестве динамически загружаемых библиотек.

Как динамически загружать статические библиотеки?

Ответы [ 2 ]

8 голосов
/ 02 сентября 2010

Статическая библиотека - это более или менее просто набор объектных файлов. Если вы хотите использовать статическую библиотеку в программе, вы должны связать с ней исполняемый файл. Затем исполняемый файл будет содержать статическую библиотеку (или части, которые вы использовали).

Если вы хотите загрузить статическую библиотеку во время выполнения, используя dlopen, вам сначала нужно создать динамическую библиотеку libfoo.so, содержащую ее.

4 голосов
/ 03 сентября 2010

Открытие файла .a с использованием dlopen не работает , а не (протестировано в Ubuntu 10.04).В следующем примере программы:

#include <dlfcn.h>
#include <stdio.h>

int main()
{
  void *lib_handle = dlopen("/usr/lib/libz.a",RTLD_LAZY);
  printf("dlopen error=%s\n",dlerror());

  printf("lib_handle=%p\n",lib_handle);
}

Я получаю:

dlopen error=/usr/lib/libz.a: invalid ELF header
lib_handle=(nil)

, а вместо использования /usr/lib/libz.so я получаю:

dlopen error=(null)
lib_handle=0x19d6030

, так жекод работает для общего объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...