我做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似乎都很喜欢。
答案 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。令人困惑的错误消息使我相信该问题与我通过提供缺少的路径纠正的问题相反。