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

PHP 8.2.7集成cURL编译失败:未定义引用curl_easy_upkeep

编译PHP 8.2.7集成cURL报错curl_easy_upkeep未定义的解决办法

问题描述

编译PHP 8.2.7时,只要配置中包含cURL就会编译失败,报错信息如下:

php-8.2.7/ext/curl/interface.c:3085: undefined reference to curl_easy_upkeep

已尝试的操作:

  • 执行dnf install curl curl-devel安装系统依赖
  • 手动将cURL 8.8.0安装到/usr/local/curl
  • 移除cURL相关配置后编译可正常完成,但无法集成cURL扩展
  • 系统存在两个cURL实例,即使使用--with-curl=/usr/local/curl配置参数,编译仍未调用手动安装的高版本cURL库
  • PHP 7.4、8.0版本可正常编译集成cURL

解决步骤

1. 配置环境变量,优先指向手动安装的cURL

在执行PHP配置命令前,先设置环境变量,让编译器优先搜索/usr/local/curl下的头文件和库文件:

export LD_LIBRARY_PATH=/usr/local/curl/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/curl/include:$C_INCLUDE_PATH
export LIBRARY_PATH=/usr/local/curl/lib:$LIBRARY_PATH

然后执行PHP配置命令,明确指定cURL路径(如果是64位系统,加上--with-libdir=lib64):

./configure --prefix=/usr/local/php82 --with-curl=/usr/local/curl --with-libdir=lib64 [你的其他配置参数]

2. 确认cURL版本兼容性

curl_easy_upkeep函数是cURL 7.62.0及以上版本才引入的,PHP 8.2.7的curl扩展依赖该函数。先确认手动安装的cURL版本:

/usr/local/curl/bin/curl --version

如果版本低于7.62.0,重新安装符合要求的cURL版本(8.8.0满足要求,确保安装过程无报错)。

3. 清理编译缓存

每次重新配置前,清理旧的编译文件,避免缓存干扰:

make clean
make distclean

4. 强制指定链接库路径

如果上述方法仍无效,在配置时直接通过LDFLAGS指定链接参数,确保编译时链接到手动安装的cURL库:

./configure --prefix=/usr/local/php82 --with-curl=/usr/local/curl --with-libdir=lib64 LDFLAGS="-L/usr/local/curl/lib -Wl,-rpath,/usr/local/curl/lib" [你的其他配置参数]

其中-Wl,-rpath用于指定运行时加载器优先使用的库路径,避免后续运行PHP时出现库版本不匹配的问题。

5. 排查编译链接过程

若问题依旧,可通过以下方式排查编译时的链接细节:

  • 查看ext/curl/config.log文件,搜索curl_easy_upkeep,确认是否找到了/usr/local/curl中的函数定义
  • 执行make VERBOSE=1编译,查看链接阶段是否使用了/usr/local/curl/lib/libcurl.so,而非系统默认的/usr/lib64/libcurl.so

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:03:30