如何使用旧版libmysqlclient编译PHP 5.2?
解决PHP 5.2编译时无法识别旧版libmysqlclient的问题
问题场景
在Rocky Linux 8服务器上,为适配遗留系统需要编译兼容OpenSSL 1.1的PHP 5.2。使用系统自带的新版libmysqlclient(8.0.32)编译PHP可成功,但运行脚本时会出现数据包交互错误;尝试指定MySQL 5.5的库和头文件目录/usr/local/mysql_old编译时,configure始终报错:
configure: error: Cannot find libmysqlclient under /usr/local/mysql_old.
Note that the MySQL client library is not bundled anymore!
解决步骤
1. 检查旧版MySQL库的目录结构
确保/usr/local/mysql_old的目录结构符合PHP configure的检查逻辑:
- 头文件必须放在
/usr/local/mysql_old/include下,确认存在mysql.h、mysql_version.h等核心文件 - 库文件必须放在
/usr/local/mysql_old/lib64下(对应--with-libdir=lib64参数),确认存在libmysqlclient.so、libmysqlclient.a;若只有lib目录,可创建软链接:ln -s /usr/local/mysql_old/lib /usr/local/mysql_old/lib64
2. 导出正确的环境变量
在执行configure前,先设置编译相关的环境变量,强制让编译器优先查找旧版库:
# 指定头文件搜索路径 export CFLAGS="-I/usr/local/mysql_old/include" # 指定库文件搜索路径,同时添加rpath确保运行时能找到旧库 export LDFLAGS="-L/usr/local/mysql_old/lib64 -Wl,-rpath,/usr/local/mysql_old/lib64" # 临时设置动态库加载路径 export LD_LIBRARY_PATH="/usr/local/mysql_old/lib64:$LD_LIBRARY_PATH"
3. 调整configure参数并执行
确保参数路径准确,同时如果OpenSSL 1.1是自定义编译的,也要指定其路径:
./configure --prefix=/usr/local/php52 \ --with-mysql=/usr/local/mysql_old \ --with-libdir=lib64 \ --with-openssl=/usr/local/openssl11 # 替换为你的OpenSSL 1.1实际安装路径
4. 排查库文件兼容性
如果仍报错,检查旧版libmysqlclient的依赖是否正常:
ldd /usr/local/mysql_old/lib64/libmysqlclient.so
确认该库没有链接到系统的新版OpenSSL或MySQL库,若有冲突,需要重新编译MySQL 5.5并指定依赖的旧版OpenSSL。
内容的提问来源于stack exchange,提问作者Krasimir Velkov
相关产品推荐
相关产品推荐

