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
Code:
void print_message();
dynlib.cpp
Code:
#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
Code:
#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).
Lesezeichen