树莓派V1编译带OpenSSL 1.1.0g支持的PHP7.2.2失败求助
嘿,我之前在树莓派ARM设备上编译PHP搭配自定义OpenSSL版本时也踩过类似的坑,你遇到的make报错大概率是configure阶段没正确识别你自己编译的OpenSSL,或者编译时链接器找不到对应的库。下面是一步步的排查和解决方法:
1. 先清理旧编译残留,避免干扰
先回到PHP源码目录,清理之前编译生成的文件,重新生成配置脚本:
make clean ./buildconf --force
这一步很关键,之前错误的配置缓存可能会导致新的configure命令异常。
2. 移除可能混淆编译器的软链,明确指定OpenSSL路径
你之前把/usr/local/include/openssl软链到/usr/include/openssl,这反而可能让编译器优先调用系统默认的旧版本OpenSSL(而不是你编译的1.1.0g),先删掉这个软链:
sudo rm /usr/include/openssl
然后在configure命令里明确指定你自定义OpenSSL的安装根目录。如果你是默认编译安装OpenSSL 1.1.0g,它的默认路径应该是/usr/local/ssl(头文件在/usr/local/ssl/include/openssl,库在/usr/local/ssl/lib)。给你一个configure的示例模板,你可以把自己原本的参数加进去:
./configure \ --prefix=/usr/local/php72 \ # PHP的安装路径,可自行修改 --with-openssl=/usr/local/ssl \ --with-openssl-dir=/usr/local/ssl \ # 下面是你可能需要的其他参数,根据自己需求加 --enable-cli \ --with-curl \ --enable-mbstring
这里的--with-openssl和--with-openssl-dir是关键,能让PHP的配置脚本精准定位到你编译的OpenSSL版本,而不是系统默认的。
3. 给编译工具指定OpenSSL库和头文件路径
如果configure成功了但make还是报错,大概率是链接器找不到OpenSSL的库文件。可以在编译前临时设置几个环境变量,告诉编译器去哪里找:
export LD_LIBRARY_PATH=/usr/local/ssl/lib:$LD_LIBRARY_PATH export LDFLAGS="-L/usr/local/ssl/lib" export CPPFLAGS="-I/usr/local/ssl/include"
设置完这些后,再重新跑configure和make命令。
4. 适配树莓派V1的ARMv6架构
树莓派V1是ARMv6架构,编译时如果不指定架构参数,可能会出现编译错误。你可以在configure命令里加上架构指定:
--build=arm-linux-gnueabihf
或者提前设置CFLAGS环境变量做适配:
export CFLAGS="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
5. 检查configure输出,确认OpenSSL识别正常
执行完configure后,一定要看输出日志,找一找有没有类似下面的内容:
checking for OpenSSL version >= 1.0.1... yes
checking for CRYPTO_free in -lcrypto... yes
checking for SSL_library_init in -lssl... yes
如果有这些提示,说明configure已经正确识别你的OpenSSL 1.1.0g了;如果出现警告或者“no”,那就要检查你的OpenSSL路径是否正确,或者有没有编译安装完整。
按照上面的步骤重新尝试,应该能解决make报错的问题。如果还有具体的错误信息,可以贴出来,我再帮你精准排查。
内容的提问来源于stack exchange,提问作者MineBartekSA




