Что загрузка задержки эквивалентна в основанной на Unix системе.
У меня есть код foo.cpp
, При компиляции с gcc я связываю его с общими объектами (полностью, три .so файла там.). Каждый .so файл для различной опции.
./foo -v
потребности libversion.so
./foo -update
потребности libupdate.so
Мне нужен символ для тех библиотек, должен быть разрешен только в то время выполнения.
./foo -v
не должен становиться безубыточным, если libupdate.so библиотека не там.
Это работает в окнах с помощью опции загрузки задержки (в свойствах dll). Каков его эквивалент в системах Unix.
Будет -lazy
опция делает то же в UNIX? Если так, где включать эту опцию: в make-файле или с компоновщиком ld?
См. Справочную информацию о dlopen () в вашей системе. Вы можете вручную открывать библиотеки и разрешать внешние символы во время выполнения, а не во время компоновки.
Выкопал пример:
int main(int argc, char **argv) {
void *handle=NULL;
double (*myfunc)(double);
char *err=NULL;
handle = dlopen ("/lib/libm.so.1", RTLD_LAZY);
if (!handle) {
err=dlerror();
perror(err);
exit(1);
}
myfunc = dlsym(handle, "sin");
if ((err = dlerror()) != NULL) {
perror(err);
exit(1);
}
printf("sin of 1 is:%f\n", (*myfunc)(1.));
dlclose(handle);
return 0;
}