GNU/Linux >> LINUX-Kenntnisse >  >> Linux

dynamic_cast schlägt fehl, wenn es mit dlopen/dlsym verwendet wird

Die Antwort auf meine Frage habe ich hier gefunden. So wie ich es verstehe, muss ich die in „testc“ verfügbare Typinfo der Bibliothek „testd“ zur Verfügung stellen. Um dies zu tun, wenn Sie dlopen() verwenden , müssen zwei zusätzliche Dinge getan werden:

  • Wenn Sie die Bibliothek verknüpfen, übergeben Sie dem Linker den -E Option, um sicherzustellen, dass alle Symbole in die ausführbare Datei exportiert werden, nicht nur diejenigen, die darin nicht aufgelöst sind (weil es keine gibt)
  • Beim Laden der Bibliothek mit dlopen() , fügen Sie die RTLD_GLOBAL hinzu Option, um sicherzustellen, dass Symbole von testc exportiert werden sind auch für testd verfügbar

Im Allgemeinen unterstützt gcc kein RTTI über dlopen-Grenzen hinweg. Ich habe persönliche Erfahrung mit diesem vermasselten try/catch, aber Ihr Problem sieht eher nach dem gleichen aus. Leider befürchte ich, dass Sie sich in dlopen an einfache Dinge halten müssen.


Linux
  1. Verlaufsersetzung schlägt fehl, wenn sie im Shell-Skript implementiert wird?

  2. Jungledisk schlägt mit Libnotify-Fehler fehl?

  3. Link mit einer älteren Version von libstdc++

  4. Welche Bedeutung hat caddr_t und wann wird es verwendet?

  5. Fehler bei der Verwendung von Git Credential Helper mit gnome-keyring als Sudo

Wann haben Sie das letzte Mal Windows verwendet?

Wie man jede Linux-Distribution mit Windows bootet – und sie bei Bedarf entfernt

dbus-Daemon schlägt mit undefiniertem Symbol fehl:XML_SetHashSalt Fix

Wann wird eine mit mkstemp() erstellte Datei gelöscht?

Wie bekomme ich eine Datei mit dem richtigen Namen, wenn ich umgeleitet werde?

sudo ohne Passwort, wenn Sie mit privaten SSH-Schlüsseln angemeldet sind