version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference

本文详细解析了在运行php-m时遇到的mysqli.so和pdo_mysql.so动态库加载失败的问题,原因是libmysqlclient.so.18文件冲突。通过删除冲突的libmysqlclient.so.18并创建指向正确版本的软链接,成功解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在运行php -m时报错:

PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli.so' (tried: /usr/lib64/php/modules/mysqli.so (/usr/lib64/php/modules/mysqli.so: symbol mysql_change_user, version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference), /usr/lib64/php/modules/mysqli.so.so (/usr/lib64/php/modules/mysqli.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' (tried: /usr/lib64/php/modules/pdo_mysql.so (/usr/lib64/php/modules/pdo_mysql.so: symbol mysql_options, version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference), /usr/lib64/php/modules//usr/lib64/php/modules/pdo_mysql.so.so (/usr/lib64/php/modules//usr/lib64/php/modules/pdo_mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli.so' (tried: /usr/lib64/php/modules/mysqli.so (/usr/lib64/php/modules/mysqli.so: symbol mysql_change_user, version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference), /usr/lib64/php/modules/mysqli.so.so (/usr/lib64/php/modules/mysqli.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql.so' (tried: /usr/lib64/php/modules/pdo_mysql.so (/usr/lib64/php/modules/pdo_mysql.so: symbol mysql_options, version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference), /usr/lib64/php/modules/pdo_mysql.so.so (/usr/lib64/php/modules/pdo_mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

看起来有一大堆东西。实际上这几个都有一个共同的一句话,那就是上面标红的那部分

其实这是因为libmysqlclient.so.18这个文件冲突了,我们可以看一下:


[root@VM_0_9_centos ~]# find / -name "libmysqlclient.so.18"
/home/mysql/lib/libmysqlclient.so.18
/usr/lib64/libmysqlclient.so.18

我们发现实际上已经存在两个这玩意,这肯定会冲突,而且php肯定是使用第二个,然而第二个并不行,我们需要的是mysql带的lib,因此,我们直接将第二个干掉,然后增加一个软链即可:

[root@VM_0_9_centos ~]# ln -s /home/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18
ln: failed to create symbolic link ‘/usr/lib64/libmysqlclient.so.18’: File exists
[root@VM_0_9_centos ~]# rm -rf /usr/lib64/libmysqlclient.so.18
[root@VM_0_9_centos ~]# ln -s /home/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

然后再次运行php -m就不会出错了

libmysqlclient_r.so.16是MySQL数据库的一个旧版本的客户端库文件。根据你的描述,你的系统中只有版本为18的客户端库文件。这可能是由于你更新了MySQL软件包的版本,或者通过其他方式更新了相关的依赖库。 如果你的应用程序或脚本之前使用的是libmysqlclient_r.so.16,并且在现有的MySQL版本下无法正常工作,那么你可能需要遵循以下步骤: 1. 首先,确认你的应用程序或脚本是否能够兼容libmysqlclient_r.so.18这个较新的客户端库文件。在大多数情况下,版本之间的差异不会导致破坏性的改变,因此新旧版本可能是可以兼容的。 2. 如果确认兼容,你可以尝试通过符号链接来解决问题。在命令行中,使用以下命令创建一个指向libmysqlclient_r.so.18的符号链接: ln -s /path/to/libmysqlclient_r.so.18 /path/to/libmysqlclient_r.so.16 其中,/path/to/libmysqlclient_r.so.18libmysqlclient_r.so.18的路径,/path/to/libmysqlclient_r.so.16是你的应用程序或脚本之前使用的库文件路径。 3. 如果符号链接方法不能正常工作,你可能需要修改你的应用程序或脚本,以便使用libmysqlclient_r.so.18作为客户端库。 4. 另外,如果你的应用程序或脚本依赖于其他的MySQL库文件,你可能也需要检查并更新这些依赖。 总之,由于libmysqlclient_r.so.16和libmysqlclient_r.so.18是不同版本的客户端库文件,所以如果你无法找到libmysqlclient_r.so.16,那么你可能需要尝试兼容新版本的库文件,或者修改你的应用程序或脚本来适应新的库文件版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值