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

FEHLER:ld.so:Objekt LD_PRELOAD kann nicht vorab geladen werden:ignoriert

Wenn Sie sicherstellen möchten, dass die Bibliothek wenn und nur wenn geladen wird das Programm lunar-calendar-gtk gestartet wird, können Sie Folgendes anwenden:

Sie setzen die Umgebungsvariable pro Befehl, indem Sie sie dem Befehl voranstellen:

$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$

Sie können dies dann in ein Shell-Skript einfügen und lunar-calendar-gtk erstellen ein symbolischer Link zu diesem Shell-Skript, der die ursprüngliche Referenz ersetzt. Dadurch wird effektiv sichergestellt, dass die Bibliothek jedes Mal geladen wird, wenn die ursprüngliche Anwendung ausgeführt wird.

Sie müssen den ursprünglichen lunar-calendar-gtk umbenennen zu etwas anderem, was möglicherweise nicht allzu faszinierend ist, da es möglicherweise Probleme bei der Deinstallation und Aktualisierung verursachen kann. Ich fand es jedoch mit einer früheren Version von Skype nützlich.


Danke für die Antworten. Ich glaube, ich habe das Problem gerade jetzt gelöst.

Da LD_PRELOAD zum Setzen einiger vorgeladener Bibliotheken dient, überprüfe ich die Bibliothek, die ld vorab lädt, mit LD_PRELOAD, von denen eine "liblunar-calendar-preload.so" ist, die nicht im Pfad "/usr/lib/liblunar-calendar- preload.so", aber ich finde eine ähnliche Bibliothek "liblunar-calendar-preload-2.0.so", die eine andere Version der vorherigen ist.

Dann schätze ich, dass liblunar-calendar-preload.so vielleicht auf eine 2.0-Version aktualisiert wurde, als das System aktualisiert wurde, sodass LD_PRELOAD "/usr/lib/liblunar-calendar-preload.so" bleibt. Daher wurde der Name der Preload-Bibliothek nicht auf die neueste Version aktualisiert.

Um eine Änderung der Umgebungsvariablen zu vermeiden, erstelle ich einen symbolischen Link unter dem Pfad "/usr/lib"

sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so

Dann starte ich bash neu, der Fehler ist weg.


Der Linker berücksichtigt einige Umgebungsvariablen. einer ist LD_PRELOAD

ab man 8 ld-linux :

LD_PRELOAD
          A whitespace-separated list of additional,  user-specified,  ELF
          shared  libraries  to  be loaded before all others.  This can be
          used  to  selectively  override  functions   in   other   shared
          libraries.   For  setuid/setgid  ELF binaries, only libraries in
          the standard search directories that are  also  setgid  will  be
          loaded.

Daher wird der Linker versuchen, die in LD_PRELOAD aufgelisteten Bibliotheken zu laden Variable, bevor andere geladen werden.

Was könnte der Fall sein, dass in der Variablen eine Bibliothek aufgeführt ist, die nicht vorgeladen werden kann? Schauen Sie in Ihren .bashrc oder .bash_profile Umgebung, in der der LD_PRELOAD gesetzt ist und entfernen Sie diese Bibliothek aus der Variablen.


Linux
  1. So beheben Sie den Fehler „Datei mit gemeinsam genutzten Objekten kann nicht geöffnet werden“ in Ubuntu-basierten Linux-Distributionen

  2. So beheben Sie den Konfigurationsfehler:Makroverzeichnis „m4“ kann nicht gefunden werden [Gelöst]

  3. XEN VM Console kann nicht geöffnet werden – Virt-Viewer-Fehler:Anzeige kann nicht geöffnet werden [Gelöst]

  4. Pspell kann nicht gefunden werden – PHP-Konfigurationsfehler behoben

  5. Kann -lm nicht finden?

libcrypto-Bibliotheksfehler kann nicht gefunden werden

libaio.so.1:Shared-Object-Datei kann nicht geöffnet werden

pkg-config-Fehler kann nicht gefunden werden

Fehler beim Erstellen von cmake:kann -lpthreads nicht finden

FEHLER:ld.so:Objekt 'libgtk3-nocsd.so.0' aus LD_PRELOAD kann nicht vorab geladen werden

FEHLER:„Wrapt“ kann nicht deinstalliert werden. bei der Installation von tensorflow-gpu~=1.14