摘要訊息 : PHP 5.3 安裝時會出現一些意想不到的錯誤, 本文提供了幾個錯誤的解決方案.

0. 前言

有一些 PHP 应用程式可能在 PHP 5.4 下运作都有些问题, 必须使用更低版本的 PHP 5.3 才可行. 但是 PHP 5.3 和 PHP 5.4 如果按照《CentOS 7 和 Nginx 下实现多版本 PHP 的共存》中的方案进行共存的话, 在安装的时候会出很多问题. 接下来就来分享一下当时遇到的一些问题的解决方案.

本文於 2022 年 3 月 17 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. MySQL 参数

这个问题的提示是 configure : error : mysql configure failed. Please check config.log for more information.

Figure 1. MySQL 参数问题

这个问题关键在于我们安装的参数有问题, 我们使用的指令可能是 ./configure --with-mysql ..., 但是在 PHP 5.3 下我们需要修改为 ./configure --with-mysqlnd ... 才可以.

2. libltdl

一旦出现 /usr/bin/ld : cannot find -lltdl 这种问题, 原因是因为少了一个依赖 : libltdl-devel. 因为我们在 《CentOS 7 和 Nginx 下实现多版本 PHP 的共存》中并没有安装这个套件, 因此我们只要执行指令 yum install -y libltdl-devel 即可.

3. 未定义的符号

如果出现

/usr/bin/ld : ext/intl/msgformat/msgformat_helpers.o : undefined reference to symbol '__gxx_personality_v@@CXXABI_1.3'/usr/lib64/libstdc++.so.6 : error adding symbols : DSO missing form command line
collect2 : error : ld returned 1 exit status
make : *** [sapi/fpm/php-fpm] Error 1

这样的问题, 同样是没有安装依赖. 执行指令 yum install -y bison flex libtiff-devel ncurses-devel pam-devel.

4. 一个官方都没有完美解决方案的问题

如果出现

/usr/bin/ld.bfd.real: ext/intl/msgformat/msgformat_helpers.o: undefined reference ...
/usr/bin/ld.bfd.real: note: '__gxx_personality_v0@@CXXABI_1.3' is defined in DSO ...
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] Error 1
Error

这种问题, 这个问题据说官方都没有一个很完善的解决方案, 不过输入以下命令可以解决这个问题 : sed -i '/^BUILD_/ s/\$(CC)/\$(CXX)/g' Makefile.