提问人:Krasimir Velkov 提问时间:10/18/2023 最后编辑:ShadowKrasimir Velkov 更新时间:10/19/2023 访问量:59
使用较旧的 libmysqlclient 编译 PHP 5.2
Compile PHP 5.2 with an older libmysqlclient
问:
我在 Rocky Linux 8 下有一个带有较新 libmysqlclient 的服务器。出于遗留目的,它需要编译 PHP 5.2。我的 PHP 5.2 已针对 openssl 1.1 进行了修补。当使用操作系统安装的libmysqlclient时,它可以很好地编译,但是运行PHP 5.2的PHP脚本在尝试与较新的客户端API版本=> 8.0.32(格式错误的数据包等错误)协商时失败。我正在尝试使用 --with-mysql='/usr/local/mysql_old' '--with-libdir=lib64' (以及其他扩展)从源代码编译 PHP 5.2。我从MySQL存档中下载了MySQL社区服务器5.5 tar.gz并将库和包含文件夹复制到/usr/local/mysql_old,保留了结构:
drwxr-xr-x 3 root root 4096 Oct 17 15:20 ./
drwxr-xr-x 50 root root 4096 Oct 17 16:34 ../
drwxr-xr-x 3 root root 4096 Oct 17 13:20 include/
-rw-r--r-- 1 root root 14850536 Oct 17 15:12 libmysqlclient.a
-rw-r--r-- 1 root root 14850536 Oct 17 15:12 libmysqlclient_r.a
lrwxrwxrwx 1 root root 26 Oct 17 15:20 libmysqlclient_r.so -> libmysqlclient_r.so.18.0.0*
lrwxrwxrwx 1 root root 26 Oct 17 15:20 libmysqlclient_r.so.18 -> libmysqlclient_r.so.18.0.0*
-rwxr-xr-x 1 root root 6935608 Oct 17 15:12 libmysqlclient_r.so.18.0.0*
lrwxrwxrwx 1 root root 24 Oct 17 15:20 libmysqlclient.so -> libmysqlclient.so.18.0.0*
lrwxrwxrwx 1 root root 24 Oct 17 15:20 libmysqlclient.so.18 -> libmysqlclient.so.18.0.0*
-rwxr-xr-x 1 root root 6935608 Oct 17 15:12 libmysqlclient.so.18.0.0*
然后我试了一下:
export LDFLAGS="-L/usr/local/mysql_old"
export LD_LIBRARY_PATH="/usr/local/mysql_old:$LD_LIBRARY_PATH"
export CFLAGS="-I/usr/local/mysql_old/include"
export CPPFLAGS="-I/usr/local/mysql_old/include"
然后配置总是失败,并显示
configure: error: Cannot find libmysqlclient under /usr/local/mysql_old.
Note that the MySQL client library is not bundled anymore!
关于如何获取配置脚本以使用旧的libmysqlclient的任何建议?
答:
0赞
Krasimir Velkov
10/19/2023
#1
事实证明,这是非常微不足道的。显示一个 strace
openat(AT_FDCWD, "/usr/local/mysql_old/lib64/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/mysql_old/lib64/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
faccessat(AT_FDCWD, "/usr/local/mysql_old/lib64/libmysqlclient.*", R_OK) = -1 ENOENT (No such file or directory)
所以看到我是如何编译 --with-libdir=lib64 的,我决定将库移动到 /usr/local/mysql_old/lib64 并成功配置/编译。
评论