由于Centos 7上有两个版本的libcurl,因此发生CRYPTO_num_locks错误

时间:2017-08-09 12:54:47

标签: centos libcurl yum

我试图在虚拟Centos 7发行版上构建一些c ++库。 由于我没有发现这个操作系统的原因,无法看到/ usr / local / lib或/ usr / local / lib64这些库安装在其他Linux发行版中。所以我不得不在/etc/ld.so.conf上添加这些文件夹。然后c ++链接器能够看到这些库。 然而,之后我给了

ldconfig -v | grep libcurl

我收到以下消息:

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

搜索后我发现它是由于存在两个版本的libcurl而导致的。我给了

ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
libcurl.so.4 -> libcurl.so.4.4.0
libcurl.so.4 -> libcurl.so.4.3.0

我得到了以下内容:

ls -lsa /usr/lib64/*curl*

这意味着我安装了新版本的libcurl,现在两个版本共存。 当我从/etc/ld.so.conf中删除文件夹路径时,yum工作正常,但是c ++链接器找不到我的应用程序需要的c ++库。我也尝试更新LD_LIBRARY_PATH,但我遇到了同样的问题 有没有办法解决这个问题,而无需在新位置重新安装库?删除旧版本是否安全?

0 lrwxrwxrwx. 1 root root 16 Aug 10 10:19 /usr/lib64/libcurl.so.4 -> libcurl.so.4.3.0 428 -rwxr-xr-x. 1 root root 435120 Nov 14 2016 /usr/lib64/libcurl.so.4.3.0 给了

sudo unlink /usr/lib64/libcurl.so.4 
sudo ln -s /usr/local/lib/libcurl.so.4.4.0 /usr/lib64/libcurl.so.4 

我试过给

ldconfig

我甚至以root身份给了他们,但每次我给 libcurl.so.4 -> libcurl.so.4.3.0 我都

  libcurl.so.4 -> /usr/local/lib/libcurl.so.4.4.0

在ldconfig给出之前

{{1}}

2 个答案:

答案 0 :(得分:0)

据我所知,CentOS上的标准库的默认路径是/ usr / lib和/ usr / lib64。如果从源代码编译,而没有在使用./configure时显式指定库路径,那么这些库默认安装在/ usr / local / lib或/ usr / local / lib64中(通常在64位上找到lib64) OS)。因此,如果在那里安装了库,则应在 /etc/ld.so.conf 中添加这些路径,然后再运行ldconfig;

根据你的例子:

ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
libcurl.so.4 -> libcurl.so.4.4.0
libcurl.so.4 -> libcurl.so.4.3.0

libcurl.so.4链接到2个不同的库版本,我认为这是导致问题的原因。

您可以删除第二个链接libcurl.so.4 -> libcurl.so.4.3.0,只保留 libcurl.so.4 libcurl.so.4 ,运行ldconfig和再试一次。

答案 1 :(得分:0)

我遇到了同样的问题,但是我的系统上没有安装curl和pycurl的两个版本。我安装了一个最终用户软件,更改了LD_LIBRARY_PATH,但其中不包含/ usr / lib或/ usr / lib64。我尝试在路径末尾添加它们,但仍然收到相同的错误。我将它们添加到最前面,没有更多错误。我必须向最终用户询问是否有正当理由将他们从环境变量中排除了默认库。