sschlarb
14-03-2007, 10:14
Hallo,
ich habe mich jetzt durch einige Anleitungen gekaempft um eine shared library dynamisch zu laden, jedoch findet dlsym meine Funktion nicht.
Ich habe folgendes Beispiel:
dynlib.h
void print_message();
dynlib.cpp
#include <stdio.h>
#include "dynlib.h"
void print_message()
{
printf("Message from lib!\n");
}
Dieses wird als shared library libdynlib.so kompiliert.
Der dynamische Aufruf soll in der Beispieldatei dynload.cpp erfolgen:
dynload.cpp
#include <stdio.h>
#include <dlfcn.h>
#include "dynlib.h"
int main()
{
void* lib_handle;
lib_handle = dlopen("/home/mynick/dynload/libdynlib.so", RTLD_LAZY);
if (!lib_handle)
{
fprintf(stderr, "Error during dlopen(): %s\n", dlerror());
return 1;
}
else
{
printf("I have function handle!\n");
}
void *print_message;
const char* error_msg;
print_message = dlsym(lib_handle,"print_message");
error_msg = dlerror();
if(error_msg)
{
fprintf(stderr, "Error locating 'print_message' - %s\n", error_msg);
return 1;
}
}
Damit erhalte ich zwar immer einen handle, aber die Funktion print_message() wird nicht gefunden. Ich habe auch schon alle moeglichen Varianten der Definition des Funktionspointers versucht. Vergeblich.
Wenn ich den Funktionspointer anlegen muss, dann ist mir auch nicht ganz klar, wie. Das koennte in diesem Fall void*(*)() sein, oder?
Ich haenge das Beispiel mit Makefiles an ('make' um Bibliothek und Beispiel zu erzeugen).
ich habe mich jetzt durch einige Anleitungen gekaempft um eine shared library dynamisch zu laden, jedoch findet dlsym meine Funktion nicht.
Ich habe folgendes Beispiel:
dynlib.h
void print_message();
dynlib.cpp
#include <stdio.h>
#include "dynlib.h"
void print_message()
{
printf("Message from lib!\n");
}
Dieses wird als shared library libdynlib.so kompiliert.
Der dynamische Aufruf soll in der Beispieldatei dynload.cpp erfolgen:
dynload.cpp
#include <stdio.h>
#include <dlfcn.h>
#include "dynlib.h"
int main()
{
void* lib_handle;
lib_handle = dlopen("/home/mynick/dynload/libdynlib.so", RTLD_LAZY);
if (!lib_handle)
{
fprintf(stderr, "Error during dlopen(): %s\n", dlerror());
return 1;
}
else
{
printf("I have function handle!\n");
}
void *print_message;
const char* error_msg;
print_message = dlsym(lib_handle,"print_message");
error_msg = dlerror();
if(error_msg)
{
fprintf(stderr, "Error locating 'print_message' - %s\n", error_msg);
return 1;
}
}
Damit erhalte ich zwar immer einen handle, aber die Funktion print_message() wird nicht gefunden. Ich habe auch schon alle moeglichen Varianten der Definition des Funktionspointers versucht. Vergeblich.
Wenn ich den Funktionspointer anlegen muss, dann ist mir auch nicht ganz klar, wie. Das koennte in diesem Fall void*(*)() sein, oder?
Ich haenge das Beispiel mit Makefiles an ('make' um Bibliothek und Beispiel zu erzeugen).