yum运行报错:/usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks

一开始是由于我使用的virt-manager shutdown 无法关闭虚拟机,然后根据这篇文章https://blog.youkuaiyun.com/weixin_33813128/article/details/92699675去安装acpid,结果yum用不了了,报了上面这个错误

然后参考这篇博客https://blog.youkuaiyun.com/wdsmao/article/details/53158879 

用命令ldd  /usr/lib64/python2.7/site-packages/pycurl.so查看问题所在(注意具体路径可能每个人有些不同,我这里是python2.7)

 红色方框圈中的为问题所在,进入该路径查看,删除libcurl.so和libcurl.so.4这两个软链接,命令分别为

rm libcurl.so

rm libcurl.so.4

 

然后进入/usr/lib64查看, cd /usr/lib64 

建立软链接 ln -s /usr/lib64/libcurl.so.4.3.0 /usr/wby/anaconda3/lib/libcurl.so.4

然后再次使用yum命令

问题解决!yum能使用了! 

参考:https://blog.youkuaiyun.com/wdsmao/article/details/53158879

https://www.jianshu.com/p/9f0c8e113d95

<think>好的,我现在需要帮助用户解决在CentOS上使用yum时出现的pycurl.so符号未定义错误,具体是CRYPTO_num_locks的问题。用户已经提供了一些引用内容,里面提到其他用户遇到了相同的错误,并且问题可能与Python模块有关。首先,我需要理解这个错误的原因。根据引用[1]和[2],错误信息是pycurl.so中缺少CRYPTO_num_locks符号。这可能是因为系统中使用的加密库不兼容或损坏,比如OpenSSL和pycurl之间的版本不匹配。 接下来,我应该考虑可能的解决方案。根据经验,这种问题通常是由于动态链接库的问题或者软件包损坏导致的。用户使用的是CentOS 7Python 2.7.5,而pycurl依赖于libcurl和OpenSSL。因此,可能的解决步骤包括重新安装pycurl、更新openssl、或者修复Python环境。 首先,我需要检查pycurl是否正确安装,以及其依赖的库是否存在。用户提到使用yum时出现错误,所以可能需要通过强制重新安装相关包来修复。例如,重新安装python-pycurllibcurl、openssl等。此外,可能需要处理库的符号链接,确保正确的版本被加载。 另外,引用中提到的错误可能与OpenSSL的版本变化有关,例如从1.0.x升级到1.1.x后,某些符号被移除或改变。因此,检查系统中安装的OpenSSL版本是否与pycurl编译时使用的版本一致也很重要。如果用户之前升级过OpenSSL,可能需要降级或重新编译pycurl以匹配新版本。 此外,用户的环境变量可能指向了错误的库路径,导致加载了不兼容的库。因此,检查LD_LIBRARY_PATH或者使用ldd命令查看pycurl.so依赖的库路径是否正确也是一个步骤。 还有可能需要更新整个系统,确保所有软件包都是最新的,并且依赖关系正确。或者,如果系统有快照或备份,可以考虑恢复到之前的状态,避免手动修复带来的风险。 在解决方案中,应该分步骤指导用户操作,例如先备份重要数据,然后逐步执行命令,并解释每个步骤的作用,让用户了解为什么这样做。同时,需要注意用户可能对Linux命令不太熟悉,所以命令需要准确,避免误操作。 最后,还需要验证解决方案是否有效,例如让用户运行yum命令测试是否还有错误,或者检查相关日志文件。如果问题依然存在,可能需要更深入的排查,比如检查系统日志或使用strace跟踪系统调用。</think>以下是为您整理的CentOS系统下解决`pycurl.so: undefined symbol: CRYPTO_num_locks`错误的完整方案,结合了系统底层依赖关系和Python环境分析: ### 一、问题根源定位 该错误源于OpenSSL库与pycurl模块的版本不兼容。当系统升级openssl后,旧版python-pycurl模块调用了已废弃的`CRYPTO_num_locks`符号(OpenSSL 1.1.x移除了该符号)[^1][^2][^3] ### 二、分步解决方案 #### 方法1:强制重建Python模块与库的绑定关系 ```bash # 删除现有符号链接 sudo rm /usr/lib64/python2.7/site-packages/pycurl* > /dev/null 2>&1 # 重新编译安装python-pycurl sudo yum reinstall python-pycurl libcurl openssl openssl-devel -y --disablerepo=* --enablerepo=base,updates > install.log 2>&1 # 验证模块加载 python -c 'import pycurl; print(pycurl.version)' | grep OpenSSL/1.0 ``` *预期输出应包含`OpenSSL/1.0.2k`等1.0.x版本标识* #### 方法2:手动修复库依赖(适用于openssl版本冲突) ```bash # 定位openssl库路径 OPENSSL_LIB=$(find /usr/lib64/ -name "libssl.so.*" | grep 1.0) CRYPTO_LIB=$(find /usr/lib64/ -name "libcrypto.so.*" | grep 1.0) # 创建强制符号链接 sudo ln -sf $OPENSSL_LIB /usr/lib64/libssl.so.10 sudo ln -sf $CRYPTO_LIB /usr/lib64/libcrypto.so.10 # 重建动态库缓存 sudo ldconfig -v | grep libssl ``` #### 方法3:Python虚拟环境隔离方案 ```bash # 安装虚拟环境工具 sudo yum install python-virtualenv -y # 创建隔离环境 virtualenv --system-site-packages /opt/yum_fix_env # 进入环境验证 source /opt/yum_fix_env/bin/activate python -c "import pycurl; print(pycurl.version)" deactivate # 设置yum默认使用虚拟环境 sudo sed -i '1s|^|#!/opt/yum_fix_env/bin/python\n|' /usr/bin/yum ``` ### 三、验证修复效果 ```bash # 检查yum基础功能 sudo yum clean all > /dev/null && sudo yum check-update # 查看详细加载路径 strace -e open yum list installed 2>&1 | grep pycurl.so ``` *成功时应有类似输出:`open("/usr/lib64/python2.7/site-packages/pycurl.so", O_RDONLY) = 3`* ### 四、预防措施 1. **版本锁定配置** ```bash sudo tee /etc/yum.conf << EOF [main] exclude=openssl* libcurl* python-pycurl EOF ``` 2. **创建系统快照** ```bash sudo yum install yum-plugin-snapper -y sudo snapper create --description "Pre-OpenSSL-update snapshot" ``` ### 五、高级排查工具 ```bash # 检查模块依赖关系 ldd /usr/lib64/python2.7/site-packages/pycurl.so | grep -E 'ssl|crypto' # 查看符号表匹配性 nm -D /usr/lib64/libcrypto.so.1.0.2k | grep CRYPTO_num_locks ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值