我正在尝试在虚拟 Centos 7 发行版上构建一些 C++ 库。 由于我还没有发现这个操作系统看不到/usr/local/lib 或/usr/local/lib64 的原因,这些库安装在其他 linux 发行版中。所以我不得不在/etc/ld.so.conf 中添加这些文件夹。然后 c++ 链接器能够看到这些库。 但是后来我给了
sudo yum update
我收到以下消息:
/usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_locks
查找后发现是由于存在两个版本的libcurl所致。我给了
ldconfig -v | grep 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
意思是我安装了一个新版本的libcurl,现在两个版本并存。
当我从/etc/ld.so.conf 中删除文件夹路径时,yum 工作正常但 c++ 链接器找不到我的应用程序需要的 c++ 库。我也尝试更新 LD_LIBRARY_PATH,但我遇到了同样的问题。
有没有办法在不在新位置重新安装库的情况下解决这个问题?删除旧版本是否安全?
ls -lsa/usr/lib64/*curl*
给出了
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
我什至给了他们 root 但每次我给 ldconfig
我得到
libcurl.so.4 -> libcurl.so.4.3.0
在 ldconfig 给出之前
libcurl.so.4 -> /usr/local/lib/libcurl.so.4.4.0
最佳答案
我遇到了同样的问题,但我的系统上没有安装两个版本的 curl 或 pycurl。我的一个最终用户软件安装更改了 LD_LIBRARY_PATH,它不包括/usr/lib 或/usr/lib64。我尝试将它们添加到路径的末尾,但仍然收到相同的错误。我将它们添加到前面,没有更多的错误。我必须询问我的最终用户是否有正当理由将默认库从环境变量中排除。
关于centos - Centos 7上两个版本的libcurl导致CRYPTO_num_locks错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45591298/