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

ld kann keine vorhandene Bibliothek finden

In Ubuntu können Sie libtool installieren die die Bibliotheken automatisch auflöst.

$ sudo apt-get install libtool

Dadurch wurde ein Problem mit ltdl behoben für mich, die als libltdl.so.7 installiert war und wurde nicht einfach als -lltdl gefunden in der Mache.


Das Problem ist, dass der Linker nach libmagic.so sucht aber Sie haben nur libmagic.so.1

Ein schneller Hack ist das Symlinken von libmagic.so.1 bis libmagic.so


Es ist Debian-Konvention, gemeinsam genutzte Bibliotheken in ihre Laufzeitkomponenten aufzuteilen (libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0 ) und ihre Entwicklungskomponenten (libmagic-dev: /usr/lib/libmagic.so → … ).

Weil der Soname der Bibliothek libmagic.so.1 ist , das ist die Zeichenfolge, die in die ausführbare Datei eingebettet wird, also die Datei, die geladen wird, wenn die ausführbare Datei ausgeführt wird.

Da die Bibliothek jedoch als -lmagic angegeben ist zum Linker sucht er nach libmagic.so , weshalb es für die Entwicklung benötigt wird.

Siehe Diego E. Pettenò:Linker und Namen für Details darüber, wie das alles unter Linux funktioniert.

Kurz gesagt, Sie sollten apt-get install libmagic-dev . Dadurch erhalten Sie nicht nur libmagic.so aber auch andere zum Kompilieren notwendige Dateien wie /usr/include/magic.h .


Wie gerade von grepsedawk formuliert, liegt die Antwort in der -l Option von g++ , Aufruf von ld . Wenn Sie sich die Manpage dieses Befehls ansehen, können Sie entweder:

  • g++ -l:libmagic.so.1 [...]
  • oder:g++ -lmagic [...] , wenn Sie einen symbolischen Link namens libmagic.so in Ihrem libs-Pfad haben

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

  2. Kann keine gültige Basis-URL finden:YumRepo-Fehler [Gelöst]

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

  4. Kann 32-Bit-Gstreamer-ffmpeg nicht normal installieren, Bibliothek kann keine anderen 32-Bit-Bibliotheken finden?

  5. /usr/bin/ld:kann -lpython2.7 nicht finden

node.js:Modul 'request' kann nicht gefunden werden

usr/bin/ld:kann -l<nameOfTheLibrary> nicht finden

pkg-config-Fehler kann nicht gefunden werden

Fehler beim Erstellen von cmake:kann -lpthreads nicht finden

Ladewarnung:Eintragssymbol _start kann nicht gefunden werden

Warum kann "vorhandene Datei nicht überschrieben werden"?