Я застрял со странной проблемой.У меня есть два файла ac и bc следующим образом: bc:
#include <stdlib.h>
int *foo() {
int *x;
x = (int *) malloc(sizeof(int));
*x = 4;
return x;
}
Я компилирую bc в b.so, используя gcc: $ gcc -o b.so -shared -fpic
ac:
#include <stdio.h>
#include <dlfcn.h>
int main() {
void *hdl;
hdl = dlopen("./b.so", RTLD_LAZY);
int *((*fn)(void));
int *x;
x = (*fn)();
fn = dlsym(hdl, "foo");
printf("%d", *x);
}
Я компилирую переменную, используя gcc:
$ gcc -fpic -ldl ac
Теперь, когда я его запускаю:
$ ./a.out Ошибка сегментации
Куда я иду не так?Это работает, когда функция в bc не возвращает указатель.
И более того, я попытался проверить наличие ошибок с помощью dlerror (), но ничего не сообщает.