Загрузка задержки, эквивалентная в основанных на Unix системах

Что загрузка задержки эквивалентна в основанной на Unix системе.

У меня есть код foo.cpp, При компиляции с gcc я связываю его с общими объектами (полностью, три .so файла там.). Каждый .so файл для различной опции.

./foo -v потребности libversion.so ./foo -update потребности libupdate.so

Мне нужен символ для тех библиотек, должен быть разрешен только в то время выполнения.

./foo -v не должен становиться безубыточным, если libupdate.so библиотека не там.

Это работает в окнах с помощью опции загрузки задержки (в свойствах dll). Каков его эквивалент в системах Unix.

Будет -lazy опция делает то же в UNIX? Если так, где включать эту опцию: в make-файле или с компоновщиком ld?

8
задан yugr 13 September 2018 в 19:52
поделиться

1 ответ

См. Справочную информацию о 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;                  
}                                                 
3
ответ дан 6 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: