Ich möchte auf den ersten Blick sagen, dass ich noch nie mit dynamischen Bibliotheken gearbeitet habe. Es ist also möglich, dass ich nicht einmal verstehe, wie sie richtig funktionieren.Lokale dynamische Bibliothek
Ich möchte einen voll geladenen Code ausführen und nach einigen Trigger (wahrscheinlich Benutzerinteraktion) möchte ich eine bestimmte Bibliothek laden und eine Funktion innerhalb dieser Bibliothek ausführen. Schließen Sie es vorzugsweise danach. Im Wesentlichen erlauben Sie mir, es zu ändern und während der Laufzeit neu zu laden.
Dies ist die einfache dynamische Bibliothek (dynlib.so befindet sich im selben Verzeichnis wie die Haupt-Code genannt):
int getInt(int arg_0)
{
return (arg_0 + 7);
}
Und das ist das Hauptprogramm:
#include <iostream>
#include <dlfcn.h>
int main() {
void *lib_handle = dlopen("./dynlib.so", RTLD_LAZY | RTLD_NOW);
if (!lib_handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
typedef int (*func_ptr)(int);
func_ptr func = (func_ptr)dlsym(lib_handle, "getInt");
std::cout << func(13);
dlclose(lib_handle);
}
I Ich kompiliere es mit: g ++ -std = C++ 11 -ldl loadlibtest.cpp -o Haupt.
Der Fehler, den ich fange, ist ./libshared.so: Datei zu kurz In meinem if (!lib_handle) {
.
Offensichtlich hat Ihre 'dynlib.so' Probleme. Wie wurde es erstellt? – SergeyA
hast du versucht, nm-D dynlib.so? – Jimmy
@SergeyA Nicht sicher, was Sie damit meinen, aber ich denke "manuell". – areuz