In der Man-Page zu dlopen gibt es ein kleines Beispielprogramm, das die Cosinusfunktion aus der Mathebibliothek läd und den Cosinus von 2.0 ausgeben soll. Nur dieses Programm lässt sich bei mir nicht kompilieren. Bestimmt muss ich irgendeinen Compilerschlater umlegen, das der Compiler beim zuweisen nicht so sehr auf den Datentyp guckt. Ich wäre aber auch an einer Korrektur des Quelltextes interessiert, die den Quelltext auf einem modernen Compiler übersetzten lässt.
Code aus der Manpage
Code:
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*cosine)(double);
char *error;
handle = dlopen ("libm.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s\n", dlerror());
exit(1);
}
cosine = dlsym(handle, "cos");
if ((error = dlerror()) != NULL) {
fprintf (stderr, "%s\n", error);
exit(1);
}
printf ("%f\n", (*cosine)(2.0));
dlclose(handle);
return 0;
}
und Mecker vom Compiler
Code:
[axel@tecton sharedlib]$ gcc -o cosine cosine.cpp -rdynamic
cosine.cpp: In function `int main(int, char**)':
cosine.cpp:16: invalid conversion from `void*' to `double (*)(double)'
[axel@tecton sharedlib]$
Lesezeichen