Я создал файл ".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)
}
Я думаю, вы должны использовать
lib=dlmopen(LM_ID_NEWLM, "/home/libh.so", RTLD_NOW);
если вы хотите загрузить одну и ту же разделяемую библиотеку несколько раз. Взгляните на этот пост
dlclose()
не dlclose()
его IIRC, он просто передает текущему процессу доступ к загруженному изображению.