динамическая загрузка статической библиотеки?

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

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

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

2 ответов


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

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


Открытие .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

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