Logo  

CS471/571 - Operating Systems

Displaying ./code/dlopen/dlopen.c

#include <stdio.h>
#include <dlfcn.h>

// Compile with: gcc -o dlopen dlopen.c -ldl

#define K	1024

int main(void)
{

  void *lib = dlopen("./libfoo.so", RTLD_LAZY);
  if (lib == NULL) {
    perror("dlopen");
    return 1;
  }

  int (*bar)(int, int) = dlsym(lib, "bar");
  void (*baz)(int, int) = dlsym(lib, "baz");
  int (*foo)(int, int, int) = dlsym(lib, "foo");

  baz(bar(5, 4), foo(1, 4, 7));

  char *str = dlsym(lib, "str");

  printf("str = %s\n", str);

//   char buf[K];
//   FILE *fp = fopen("/proc/self/maps", "r");
//   while (fgets(buf, K, fp) != NULL) printf("%s", buf);
//   fclose(fp);


  return 0;
}