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

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

Um herauszufinden, wonach der Linker sucht, führen Sie ihn im ausführlichen Modus aus.

Ich bin beispielsweise auf dieses Problem gestoßen, als ich versucht habe, MySQL mit ZLIB-Unterstützung zu kompilieren. Ich habe während der Kompilierung einen Fehler wie diesen erhalten:

/usr/bin/ld: cannot find -lzlib

Ich habe etwas gegoogelt und bin immer wieder auf verschiedene Probleme der gleichen Art gestoßen, bei denen die Leute sagten, sie sollten sicherstellen, dass die .so-Datei tatsächlich existiert, und wenn dies nicht der Fall ist, erstellen Sie einen Symlink zu der versionierten Datei, z. B. zlib. also.1.2.8. Aber als ich nachgesehen habe, existierte zlib.so. Also, dachte ich, das kann doch nicht das Problem sein.

Ich bin im Internet auf einen anderen Beitrag gestoßen, der vorschlug, make mit LD_DEBUG=all:

auszuführen
LD_DEBUG=all make

Obwohl ich eine Menge Debugging-Ausgaben erhalten habe, war es nicht wirklich hilfreich. Es fügte mehr Verwirrung hinzu als alles andere. Also war ich kurz davor aufzugeben.

Dann hatte ich eine Offenbarung. Ich dachte, ich sollte den Hilfetext für den ld-Befehl überprüfen:

ld --help

Daraus habe ich herausgefunden, wie man ld im ausführlichen Modus ausführt (stellen Sie sich das vor):

ld -lzlib --verbose

Dies ist die Ausgabe, die ich erhalten habe:

==================================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a failed
attempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib

Klingel, klingel, klingel...

Also, um es endlich zu beheben, damit ich MySQL mit meiner eigenen Version von ZLIB (anstatt der gebündelten Version) kompilieren konnte:

sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so

Voila!


Wenn der Name Ihrer Bibliothek lautet, sagen Sie libxyz.so und es befindet sich auf dem Pfad sagen wir:

/home/user/myDir

um es dann mit Ihrem Programm zu verknüpfen:

g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog

Es scheint keine Antwort zu geben, die das sehr häufige Anfängerproblem angeht, die erforderliche Bibliothek überhaupt nicht zu installieren.

Auf Debianish-Plattformen, wenn libfoo fehlt, können Sie es häufig mit etwas wie

installieren
apt-get install libfoo-dev

Die -dev Version des Pakets ist für Entwicklungsarbeiten erforderlich, sogar für triviale Entwicklungsarbeiten wie das Kompilieren von Quellcode zum Verknüpfen mit der Bibliothek.

Der Paketname erfordert manchmal einige Dekorationen (libfoo0-dev ? foo-dev ohne lib Präfix? usw.), oder Sie können einfach die Paketsuche Ihrer Distribution verwenden, um genau herauszufinden, welche Pakete eine bestimmte Datei enthalten.

(Wenn es mehr als eine gibt, müssen Sie ihre Unterschiede herausfinden. Die Auswahl der coolsten oder beliebtesten ist eine übliche Abkürzung, aber kein akzeptables Verfahren für ernsthafte Entwicklungsarbeit.)

Für andere Architekturen (insbesondere RPM) gelten ähnliche Verfahren, obwohl die Details anders sein werden.


Linux
  1. phpize-Konfigurationsfehler:Quellen können nicht gefunden werden (config.m4)

  2. /usr/bin/python3.5 versehentlich gelöscht, Neuinstallation nicht möglich?

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

  4. Installieren Sie Binärdateien in /bin, /sbin, /usr/bin und /usr/sbin, Interaktionen mit --prefix und DESTDIR

  5. OCaml-Kompilierungsfehler:/usr/bin/ld:kann -lstr nicht finden

Linux – Zusammenführen von /usr/bin und /usr/sbin in /bin (gnu/linux)?

ld kann keine vorhandene Bibliothek finden

libcrypto-Bibliotheksfehler kann nicht gefunden werden

pkg-config-Fehler kann nicht gefunden werden

cmake --version zeigt auf /usr/bin/cmake, während cmake auf /usr/local/bin zeigt

/bin Inhalt nach /usr/bin verschoben, rückgängig machen möglich?