conda环境下pycurl.so: undefined symbol: CRYPTO_num_locks解决方案

1 使用yum安装任何软件都失败

使用yum安装软件,出现如下错误:

[root@localhost repositories]# yum install zlib-devel
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   /usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.5 (default, Oct 14 2020, 14:45:30) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

If you cannot solve this problem yourself, please go to 
the yum faq at:
  http://yum.baseurl.org/wiki/Faq

2 问题分析

查看链接库内容

[root@localhost repositories]# ldd /usr/lib64/python2.7/site-packages/pycurl.so
        linux-vdso.so.1 =>  (0x00007ffee8f5d000)
        libcurl.so.4 => /root/anaconda3/lib/libcurl.so.4 (0x00007f627dbc8000)
        libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f627d476000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f627d25a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f627ce8c000)
        libnghttp2.so.14 => /root/anaconda3/lib/./libnghttp2.so.14 (0x00007f627db90000)
        libssh2.so.1 => /root/anaconda3/lib/./libssh2.so.1 (0x00007f627db4c000)
        libssl.so.1.1 => /root/anaconda3/lib/./libssl.so.1.1 (0x00007f627dabb000)
        libcrypto.so.1.1 => /root/anaconda3/lib/./libcrypto.so.1.1 (0x00007f627cbbd000)
        libgssapi_krb5.so.2 => /root/anaconda3/lib/./libgssapi_krb5.so.2 (0x00007f627cb6a000)
        libz.so.1 => /root/anaconda3/lib/./libz.so.1 (0x00007f627da9c000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f627c966000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f627c763000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f627c461000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f627da53000)
        libkrb5.so.3 => /root/anaconda3/lib/././libkrb5.so.3 (0x00007f627c38c000)
        libk5crypto.so.3 => /root/anaconda3/lib/././libk5crypto.so.3 (0x00007f627da80000)
        libcom_err.so.3 => /root/anaconda3/lib/././libcom_err.so.3 (0x00007f627da7a000)
        libkrb5support.so.0 => /root/anaconda3/lib/././libkrb5support.so.0 (0x00007f627c37d000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f627c163000)

 其中有问题的项为:

        libcurl.so.4 => /root/anaconda3/lib/libcurl.so.4 (0x00007f627dbc8000)

检索本地链接库

[root@localhost repositories]# ldconfig -v | grep libcurl
ldconfig: 无法对 /libx32 进行 stat 操作: 没有那个文件或目录
ldconfig: 多次给出路径“/usr/lib”
ldconfig: 多次给出路径“/usr/lib64”
ldconfig: 无法对 /usr/libx32 进行 stat 操作: 没有那个文件或目录
ldconfig: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn.so.8 不是符号连接

ldconfig: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 不是符号连接

ldconfig: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 不是符号连接

ldconfig: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 不是符号连接

ldconfig: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 不是符号连接

ldconfig: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 不是符号连接

ldconfig: /usr/local/cuda-11.3/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 不是符号连接

        libcurl.so.4 -> libcurl.so.4.3.0

问题产生的原因在于linux的python版本与conda环境下的版本不一致,而软连接连接到了conda环境中的动态链接库,从而导致执行yum时报错,无法进行软件安装

3 问题解决

注意:实际操作时,路径要根据本地查询情况确定  

rm -f /root/anaconda3/lib/libcurl.so
rm -f /root/anaconda3/lib/libcurl.so.4


ln -s /usr/lib64/libcurl.so.4.3.0 /root/anaconda3/lib/libcurl.so.4

再次运行安装命令,安装成功,问题解决

 [root@localhost lib64]# yum install zlib-devel
已安装:
  zlib-devel.x86_64 0:1.2.7-21.el7_9                                                                                                                                                      

作为依赖被升级:
  zlib.x86_64 0:1.2.7-21.el7_9                                                                                                                                                            

完毕!

备注:

ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf 内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍 lib.so),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

ldd是用来查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。

猜你喜欢

转载自blog.csdn.net/lsb2002/article/details/131667262