Suchen Sie den Speicherort der Datei libmysqlclient.so.X in Linux-Umgebungen

7

Ich stelle ein Skript zusammen, für das die Datei libmysqlclient.so. [15 | 16 | 18] .so bekannt sein muss. Es befindet sich normalerweise in / usr / lib /, / usr / lib64 / oder einem Unterverzeichnis von mysql / der oben genannten Verzeichnisse.

Ich habe ein paar Dinge ausprobiert. Erstens kann der Speicherort manchmal in einer MySQL-Datei in /etc/ld.so.conf.d/mysql* gefunden werden, aber das war auf vielen Servern nicht der Fall.

Eine andere Möglichkeit besteht darin, die oben genannten Verzeichnisse nach diesen Dateien zu durchsuchen. Ich werde wissen, welche Version von MySQL verwendet wird, damit ich nach der richtigen .so-Datei suchen kann, aber leider scheinen viele Leute mehrere .so-Dateien installiert zu haben. Zum Beispiel können beide existieren:

  • /usr/lib/libmysqlclient.so.15

  • /usr/lib64/libmysqlclient.so.15

In dieser Situation bin ich mir nicht sicher, welche .so-Datei verwendet wird.

Gibt es überhaupt eine Möglichkeit zu erkennen, wo die richtige libmysqlclient.so installiert ist?

Wrangler
quelle
Können Sie genauer sagen, was Sie erreichen möchten?
Andrew Case

Antworten:

7

Dadurch erhalten Sie alle vom Linker erkannten libmysql-Dateien. Je höher auf der Liste, desto höher ist die Priorität und es ist wahrscheinlicher, dass eine Verknüpfung hergestellt wird.

/sbin/ldconfig -p | grep mysql | cut -d\> -f2

Eine Einschränkung ist jedoch, dass die meisten Anwendungen, da sie über einen gcc -lmysqlclient verknüpft sind, eine Datei in der als libmysqlclient.so aufgelisteten ldconfig anstelle von .so.15 oder was auch immer bevorzugen. Ich persönlich würde also davon ausgehen, dass der erste libmysqlclient.so der richtige ist.

Kyle
quelle
3

Welche gemeinsam genutzte Objektbibliothek verwendet wird, hängt von der Benutzerumgebung und der ausgeführten Binärdatei ab. Wenn Sie su - USERzu dem Benutzer gehen, der die Binärdatei ldd MYSQLBINARY | grep mysqlclientausführt, und dann den Befehl ausführen, der bestimmt, welche mysqlclient-Bibliothek verwendet werden soll.

Standardmäßig auf den meisten Linux-Systemen / usr / lib (für x86-Binärdateien verwendet) und / usr / lib64 (für x86_64-Bit-Binärdateien verwendet).

Übrigens, wird ausgeführt locate libmysqlclient.so, um eine Liste aller freigegebenen Objekte abzurufen, die systemweit installiert sind (wahrscheinlich werden jedoch keine in Benutzerpfaden installierten .so-Dateien gemeldet).

Andrew Case
quelle
1

Denken Sie daran, dass sich die verwendeten Elemente möglicherweise nicht einmal in / usr / lib oder /usr/lib64 befinden. Manchmal befinden sich diese Dinge auch in oder unter / usr / local / lib, je nachdem, wie die Dinge kompiliert wurden.

Ich bin sicher, dass es eine absolut narrensichere Methode gibt, um die Entscheidung zu treffen. Man kann jedoch einige verdammt gute Vermutungen anstellen.

mdpc
quelle
0

Wenn Sie den Paketnamen kennen, warum nicht den Inhalt des Pakets auflisten und danach suchen?

In Redhat so etwas wie ...

rpm -ql mysql | grep libmysql
Glücksaxi
quelle