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?
Antworten:
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.
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.
quelle
Welche gemeinsam genutzte Objektbibliothek verwendet wird, hängt von der Benutzerumgebung und der ausgeführten Binärdatei ab. Wenn Sie
su - USER
zu dem Benutzer gehen, der die Binärdateildd MYSQLBINARY | grep mysqlclient
ausfü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).quelle
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.
quelle
Wenn Sie den Paketnamen kennen, warum nicht den Inhalt des Pakets auflisten und danach suchen?
In Redhat so etwas wie ...
quelle