при вызове общего объекта происходит сбой во второй раз

0

Я создал файл ".so" и вызывается из моего кода. Он работает очень хорошо в первый раз, и я получаю желаемый результат, тогда как когда то же самое вызывается во второй раз, его получение разбивается. Ниже приведен мой код. Я делаю что-то неправильно.

#include <dlfcn.h>
#include <stdio.h> /*for printf() */
#include <stdlib.h> /* for exit() */
#include <FaceRecognition.h>
#include <string>

using namespace std;

typedef void (*pf)( string, string, string );

int func ()
{
 void *lib;
 pf greet;

 const char * err;

    lib=dlopen("/home/libh.so", RTLD_NOW);

    if (!lib)
    {
     printf("failed to open hello.so: %s \n", dlerror());
     exit(1);
    }
    dlerror(); /*first clear any previous error; redundant 
               in this case but a useful habit*/
    greet= (pf) dlsym(lib, "sample");/*locate hello() */

    err=dlerror();/*check for errors and copy error message*/
    if (err)
    {
     printf("failed to locate hello(): %s \n", err);
     exit(1);
    }

    greet( "auth", "/home", "/home/train1.gal" ); /*call hello() */

    dlclose(lib);

 return 0;
}


int main () {
    func();  --> getting the expected result for the first time
    func();  --> getting crashed here ( core dumbed)

}
  • 0
    может быть, что DLL не выгружается должным образом
  • 0
    @Paranaix как его разгрузить? Dlclose не будет делать это?
Показать ещё 2 комментария
Теги:
dll
shared-libraries

1 ответ

0

Я думаю, вы должны использовать

lib=dlmopen(LM_ID_NEWLM, "/home/libh.so", RTLD_NOW);

если вы хотите загрузить одну и ту же разделяемую библиотеку несколько раз. Взгляните на этот пост

  • 0
    Если я использую «dlmopen», это приводит к сбою при первом вызове.
  • 0
    @ user3021933 Но в целом я думаю, что он прав. Вы не можете загрузить свою DLL дважды. dlclose() не dlclose() его IIRC, он просто передает текущему процессу доступ к загруженному изображению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню