динамическая загрузка статической библиотеки?
может ли статическая библиотека *.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
таким образом, тот же код работает для общего объекта.