[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: plugins



> how can I load shared libraries by my programm?
> How does that work genrerelly?

	After reading the man pages for dlopen, close, etc, I threw together a
quick program to make sure I knew what I was doing, and it seems to work:

dltest.c:
---------

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

main() {
   char dlname[]="./dynamic1.so";
   int i;
   char *error;
   void *handle;
   void (*func)(void);

   printf("Which library should I load? (1, 2) : ");
   scanf("%d", &i);
   dlname[9] = i + '0';

   handle = dlopen(dlname, RTLD_LAZY);
   if(!handle) {
      printf("Error: %s\n", dlerror());
      exit(1);
      }
   func = dlsym(handle, "function");
   if ((error = dlerror()) != NULL)  {
      printf("Error: %s\n", error);
      exit(1);
      }

   (*func)();
   dlclose(handle);
} /* End */

dynamic1.c:
-----------

#include <stdio.h>

void function( void ) {
   printf("This is from dynamic1.so\n");
   return;
}

dynamic2.c
----------

#include <stdio.h>

void function( void ) {
   printf("This is from dynamic2.so\n");
   return;
}

--------------

	Just compile the three files like so:

gcc -rdynamic -ldl -o dltest dltest.c
gcc -shared -o dynamic1.so dynamic1.c
gcc -shared -o dynamic2.so dynamic2.c

	And run dltest. It's obviously a VERY simple example, but it works,
and it even does some error checking, and I threw it together in about 2
minutes, so it shows how easy this stuff actually is. (Since I DID throw it
together in 2 min, can anyone see any problems I may have missed?)

								--Brad