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

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

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

我尝试了一些方法。首先,有时可以在 /etc/ld.so.conf.d/mysql* 中的 mysql 文件中找到位置,但在许多服务器上并非如此。

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

  • /usr/lib/libmysqlclient.so.15

  • /usr/lib64/libmysqlclient.so.15

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

有没有办法可以知道正确的 libmysqlclient.so 安装在哪里?

答案1

这将为您提供链接器识别的所有 libmysql 文件。列表中的优先级越高,链接的可能性就越大。

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

但需要注意的是,由于大多数应用程序通过执行 gcc -lmysqlclient 进行链接,因此它们会优先选择 ldconfig 中列出的 libmysqlclient.so 文件,而不是 .so.15 或其他文件。因此,我个人认为第一个 libmysqlclient.so 是正确的。

答案2

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

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

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

答案3

请记住,所使用的 so 甚至可能不在 /usr/lib 或 /usr/lib64 中.....有时这些内容也位于 /usr/local/lib 中或之下,具体取决于内容的编译方式。

我确信有一种万无一失的确定方法。不过人们可以做出一些相当准确的猜测。

答案4

如果您知道包名称,为什么不列出包的内容并对其进行 grep?

在 Redhat 中,类似于...

rpm -ql mysql | grep libmysql

相关内容