Boa tarde, estou desenvolvendo um pequeno algoritmo, onde o programa carrega uma biblioteca dinamica (.so linux, .dll windows), chama a função run() desta biblioteca, passando como parametro da função, um ponteiro de uma função desse programa principal, para que a biblioteca possa utiliza-la, como em: Programa principal: int auxiliar(){
printf("testeeeee");
return 0;
}
int main(){
...
module = dlopen("teste.so", RTLD_LAZY);
run_func = dlsym(module, "run");
pthread_t thread;
pthread_create(&thread, NULL,runfunc, &auxiliar);
pthread_join(thread, NULL);
...
}
Biblioteca:
typedef int (*PFUNC_AUX)();
void run(PFUNC_AUX funcao_auxiliar)
{
[indent]funcao_auxiliar();[/indent]
} O programa começa executando corretamente, consegue chamar a função da biblioteca, porém quando a biblioteca vai chamar a função que foi passada via ponteiro, o erro "Falha de segmentação" ocorre. Eu acho que é pelo fato da função do ponteiro não estar no módulo, e o Linux não permitiria a biblioteca acessar algo que não foi alocado por ela, como medida de segurança. alguém saberia de uma solução pra passar uma função auxiliar para a biblioteca, ou não é possivel?