在Linux环境中查找libmysqlclient.so.X文件的位置

我正在编写一个需要了解libmysqlclient.so [15 | 16 | 18] .so文件的脚本。 它通常位于/ usr / lib /,/ usr / lib64 /或上述目录的mysql /子目录中。

我已经尝试了一些东西。 首先,有时位置可以在/etc/ld.so.conf.d/mysql*中的mysql文件中find,但在许多服务器上并不是这种情况。

另一种可能性是search上述目录中的这些文件。 我会知道哪个版本的MySQL正在使用,所以我可以search正确的.so文件,但不幸的是,许多人似乎有多个.so的安装。 例如,两者都可能存在:

在这种情况下,我不确定哪个.so文件正在被使用。

无论如何要告诉哪里安装了正确的libmysqlclient.so?

这会给你链接器识别的所有libmysql文件。 列表中的较高者优先级较高,并且更有可能与之相关联。

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

有一点需要注意的是,由于大多数应用程序通过执行gcc -lmysqlclient链接,他们会在ldconfig中列出libmysqlclient.so文件,而不是.so.15或其他文件。 所以我个人认为第一个libmysqlclient.so是正确的。

使用哪个共享对象库取决于运行的用户环境和二进制文件。 如果您对正在运行二进制文件的用户su - USER ,然后运行命令ldd MYSQLBINARY | grep mysqlclient ldd MYSQLBINARY | grep mysqlclient将决定哪个mysqlclient库将被使用。

默认情况下,在大多数Linux系统上,/ usr / lib(用于x86二进制文件)和/ usr / lib64(用于x86_64位二进制文​​件)。

顺便说一句,运行locate libmysqlclient.so获取系统安装的所有共享对象的列表(可能不会报告安装在用户path中的.so文件)。

请记住,如此使用甚至可能不在/ usr / lib或/usr/lib64中。有时这些东西驻留在/ usr / local / lib下,也取决于编译的方式。

我相信有一个完全可靠的方法来做出决定。 人们可以做出一些不错的猜测。

如果你知道包名,为什么不列出包的内容和grep呢?

在Redhat,像…

 rpm -ql mysql | grep libmysql