Ubuntu 20.10安装curl后报错curl_url_set未定义如何解决
问题原因分析
报错核心诱因
你遇到的symbol lookup error: undefined symbol: curl_url_set, version CURL_OPENSSL_4报错,本质是curl二进制程序编译时依赖的libcurl动态库版本,和系统运行时实际加载的libcurl动态库版本不兼容:curl_url_set是特定版本libcurl才提供的API接口,你当前运行curl时加载的libcurl库没有对应实现,所以触发符号查找失败。
依赖未正常安装的原因
有两种常见场景会导致apt没有自动安装匹配的依赖:
- 你之前手动编译安装过其他版本的libcurl到
/usr/local等优先级更高的动态库搜索路径下,dpkg数据库没有记录这部分手动安装的文件,apt判定依赖时误以为系统中已有的libcurl版本符合要求,实际第三方编译的libcurl接口不匹配 - Ubuntu 20.10属于已经停止官方支持的短期发行版,常规软件源已经下线,如果你没有替换为old-releases源,apt拉取的包版本存在依赖错位,无法保证版本匹配
修复方案
按以下步骤操作即可解决:
- 首先排查当前curl调用的libcurl路径
执行命令:
如果输出的路径不是ldd $(which curl) | grep libcurl/usr/lib/x86_64-linux-gnu/libcurl.so.4(比如是/usr/local/lib/下的文件),说明是手动编译的libcurl冲突,直接删除对应路径下的所有libcurl相关.so文件,之后执行sudo ldconfig刷新动态库缓存。 - 重装官方源匹配版本的curl和依赖
先确认你的Ubuntu 20.10已经替换为old-releases源,之后执行:sudo apt update sudo apt install --reinstall libcurl4 curl - 异常场景补充排查
如果执行完上述步骤还是报错,检查是否有自定义动态库路径优先级覆盖:- 执行
echo $LD_LIBRARY_PATH,如果输出非空,临时取消变量测试:unset LD_LIBRARY_PATH && curl,如果可以正常运行,就删除用户环境变量配置文件(/.bashrc、/.profile等)中LD_LIBRARY_PATH的冗余配置即可 - 执行
apt policy libcurl4 curl查看两个包的版本是否一致,如果不一致,执行sudo apt install libcurl4=<匹配版本号> curl=<匹配版本号>强制安装同版本套件即可
- 执行
内容的提问来源于stack exchange,提问作者Samantha Atkins
相关产品推荐
相关产品推荐

