C库版本冲突,如何管理?

时间:2017-04-08 17:59:34

标签: c debian

我做C应用程序。在构建中,我指定

LIBS=-lcrypto -lcurl

我收到警告信息,

/usr/bin/ld: warning: libcrypto.so.1.0.2, needed by /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/libcurl.so, may conflict with libcrypto.so.1.1

默认情况下,-lcrypto与1.1版本有关系。 Libcurl依赖于1.0.2版本。我让他安静如

LIBS=/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2  -lcurl

但是包含标题#include <openssl/crypto.h>中的功能背叛了链接版本。标题与1.1版本有关系,而不是1.0.2。

我希望就如何管理问题提出建议。我依赖于系统CURL库,但它依赖于我不想要的OpenSSL版本。怎么办?

编辑澄清:如果有帮助,我不想重新编译CURL。这是常见的“依赖地狱”情景吗?

编辑2:跟踪我的so文件,我发现了这个,

$ dpkg --list | grep libssl1
ii  libssl1.0.0:amd64                     1.0.1t-1+deb8u6                      amd64        Secure Sockets Layer toolkit - shared libraries
ii  libssl1.0.2:amd64                     1.0.2k-1                             amd64        Secure Sockets Layer toolkit - shared libraries
ii  libssl1.1:amd64                       1.1.0e-1                             amd64        Secure Sockets Layer toolkit - shared libraries

$ apt-file list libssl1.0.0
# Nobody! Strange?
$ apt-file list libssl1.0.2 | grep libcrypto
libssl1.0.2: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2
$ apt-file list libssl1.1 | grep libcrypto
libssl1.1: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
$ ls -l /usr/lib/x86_64-linux-gnu/*libcrypto*
-rw-r--r-- 1 root root 4799548 Feb 16 17:57 /usr/lib/x86_64-linux-gnu/libcrypto.a
lrwxrwxrwx 1 root root      16 Feb 16 17:57 /usr/lib/x86_64-linux-gnu/libcrypto.so -> libcrypto.so.1.1
-rw-r--r-- 1 root root 2066816 Jan 26 23:40 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
-rw-r--r-- 1 root root 2492192 Jan 26 15:39 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2
-rw-r--r-- 1 root root 2686448 Feb 16 17:57 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
$ ls -l /usr/lib/x86_64-linux-gnu/*libcurl*
-rw-r--r-- 1 root root 1059312 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl.a
lrwxrwxrwx 1 root root      19 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3 -> libcurl-gnutls.so.4
lrwxrwxrwx 1 root root      23 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 -> libcurl-gnutls.so.4.4.0
-rw-r--r-- 1 root root  518560 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.4.0
-rw-r--r-- 1 root root     951 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl.la
lrwxrwxrwx 1 root root      16 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl.so -> libcurl.so.4.4.0
lrwxrwxrwx 1 root root      12 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl.so.3 -> libcurl.so.4
lrwxrwxrwx 1 root root      16 Feb 21 22:38 /usr/lib/x86_64-linux-gnu/libcurl.so.4 -> libcurl.so.4.4.0
$ ldd /usr/lib/x86_64-linux-gnu/libcurl.so | grep libcrypto
    libcrypto.so.1.0.2 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2 (0x00007fd97750a000)

可以看出,最后一行演示了Debian包依赖于这个1.0.2。在使用apt-cache showpkg libssl1.0.2检查反向依赖关系时,我看到很多东西。对于1.1版本来说,Debian似乎都很喜欢。

2 个答案:

答案 0 :(得分:3)

从Debian 8(jessie)升级到Debian 9(延伸)之后,我收到了同样的警告。对我有用的修复是:

apt-get install libssl1.0-dev

答案 1 :(得分:0)

我在寻找类似问题时发现了这一点。以我为例,它是CMakeLists.txt,其link_directories缺少/ usr / local / lib,因此默认为/lib/x86_64-linux-gnu/libcrypto.so.1.0.0。令人困惑的错误消息使我相信该问题与我通过提供缺少的路径纠正的问题相反。