You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04编译PHP8.0.15开启openssl支持时make报错

问题描述

从源码构建PHP 8.0.15版本,执行配置命令./configure --with-openssl完成后,运行make执行编译阶段出现如下末尾报错:

^~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/ubuntu/build/php-8.0.15/ext/openssl/openssl.c:46:
/usr/include/openssl/rsa.h:289:29: note: expected ‘RSA *’ {aka ‘struct rsa_st *’} but argument is of type ‘const struct rsa_st *’
  289 |                        RSA *rsa, int padding);
      |                        ~~~~~^~~
make: *** [Makefile:638: ext/openssl/openssl.lo] Error 1

当前环境信息:

  • 操作系统:Ubuntu 22.04 LTS
  • OpenSSL版本:OpenSSL 3.0.2 15 Mar 2022(系统链接库版本一致)
根因

PHP 8.0.15发布时未做OpenSSL 3.0的API适配。OpenSSL 3.0调整了RSA相关操作函数的参数签名,对入参的const修饰符校验更严格,PHP自带openssl扩展传参类型和系统安装的OpenSSL 3.0头文件定义不匹配,直接触发编译失败。

解决方法

三选一即可,优先选前两种稳定性更高的方案:

  • 升级PHP源码版本:直接更换为PHP 8.0.18及以上的8.0分支版本源码,官方从8.0.18版本开始合入了OpenSSL 3.0全量兼容补丁,下载新版本源码后重新执行配置、编译流程即可,不需要额外修改代码。
  • 手动修改源码适配:不想换源码版本的话按以下步骤操作:
    1. 进入PHP源码根目录,打开ext/openssl/openssl.c文件,检索所有RSA_public_encrypt、RSA_private_decrypt函数调用位置,将传入的RSA类型参数强制转换为非const类型,即把传参rsa替换为(RSA *)rsa
    2. 保存文件后执行make clean,清理之前编译生成的中间目标文件
    3. 重新执行./configure --with-openssl、make即可正常完成编译
  • 降级编译依赖的OpenSSL版本:自行编译安装OpenSSL 1.1.1版本到独立非系统目录(例如/usr/local/openssl11),避免覆盖系统自带的OpenSSL 3.0,配置PHP时指定依赖的OpenSSL路径:./configure --with-openssl=/usr/local/openssl11,后续正常执行编译即可。

注意:手动修改源码如果漏改其他不匹配的参数位置,后续运行OpenSSL相关功能时可能出现隐式兼容问题,生产环境不推荐用这种方式。

内容的提问来源于stack exchange,提问作者Black

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 17:01:27