// compile with:
// gcc -rdynamic -ldl DynFct.linux.c
#include <dlfcn.h>
#include <stdio.h>

int bonjour(int a)
{
  return 42;
}

int truc(int a)
{
  return a + 10;
}

int machin(int a)
{
  return -2*a;
}

int main(int argc, char** argv)
{
  char fct_name[20];
  int a,r;
  int (*fct)(int);
  void* me = dlopen(NULL,RTLD_LAZY);
  printf("Quel est la fonction ? ");
  scanf("%s",fct_name);
  printf("Quel est l'argument de la fonction ? ");
  scanf("%d",&a);
  fct = (int(*)(int))dlsym(me, fct_name);
  dlclose(me);
  r = fct(a);
  printf("Le resultat est : %d\n",r);
  return 0;
}

