C++ 是组件版本!=在cmake find_软件包中时软件包版本正常?

C++ 是组件版本!=在cmake find_软件包中时软件包版本正常?,c++,cmake,C++,Cmake,我的环境: 我的系统根 cmake version 3.16.3 OpenSSL 1.1.0f 25 May 2017 cpp-httplib v0.7.0 cpp httplib中的CMakeLists.txt规定: -rw-r--r-- 1 developer developer 41292 Jan 14 2018 libcrypt.a -rw-r--r-- 1 developer developer 3143988 Mar 29 2018 libcrypto.a lrw

我的环境:

我的系统根

cmake version 3.16.3
OpenSSL 1.1.0f  25 May 2017
cpp-httplib v0.7.0
cpp httplib中的CMakeLists.txt规定:

-rw-r--r--  1 developer developer    41292 Jan 14  2018 libcrypt.a
-rw-r--r--  1 developer developer  3143988 Mar 29  2018 libcrypto.a
lrwxrwxrwx  1 developer developer       16 Mar 29  2018 libcrypto.so -> libcrypto.so.1.1
lrwxrwxrwx  1 developer developer       18 Mar 29  2018 libcrypto.so.1.0.0 -> libcrypto.so.1.0.2
-rwxrw-r--  1 developer developer  1497376 Mar 29  2018 libcrypto.so.1.0.2
-rw-r--r--  1 developer developer  1827956 Mar 29  2018 libcrypto.so.1.1
lrwxrwxrwx  1 developer developer       46 Mar 29  2018 libcrypt.so -> ../../../lib/arm-linux-gnueabihf/libcrypt.so.1
-rw-r--r--  1 developer developer   269496 Oct  7  2017 libssl3.so
-rw-r--r--  1 developer developer   490932 Mar 29  2018 libssl.a
lrwxrwxrwx  1 developer developer       13 Mar 29  2018 libssl.so -> libssl.so.1.1
-rwxrw-r--  1 developer developer   320924 Mar 29  2018 libssl.so.1.0.2
-rw-r--r--  1 developer developer   327952 Mar 29  2018 libssl.so.1.1
我把它包括在我的项目中,我构建了它并检查了共享对象,然后我得到了

set(_HTTPLIB_OPENSSL_MIN_VER "1.1.1")
...
find_package(OpenSSL ${_HTTPLIB_OPENSSL_MIN_VER} COMPONENTS Crypto SSL QUIET)
...
target_link_libraries(${PROJECT_NAME} ${_INTERFACE_OR_PUBLIC}
    OpenSSL::SSL OpenSSL::Crypto
)
我知道版本不完全匹配,因为没有设置精确选项。
但是为什么libssl只链接到1.1,而libcrypto链接到1.0.2和1.1?

当链接到库时,CMake通常使用库的非版本变体:
libssl.so
libcrypto.so
,等等。很可能,您的可执行文件链接到
libcrypto.so.0.2
,原因不依赖于OpenSSL。所以在链接中,
libcrypto
libssl
是两种不同的东西,如果我的可执行文件试图链接,可能会链接不同的版本?我知道
libssl
依赖于
libcrypto
。可执行文件是否有可能仅尝试链接
libssl.so.1.1
libcrypto.so.1.0.2
?如果是,会有任何问题吗?“可执行文件是否有可能仅尝试链接
libssl.so.1
libcrypto.so.1.0.2
?如果是,会有任何问题吗?”-我不建议这样做。尝试找出项目链接到
libcrypto.so.1.0.2
的原因,并修复该链接。
libssl.so.1.1 => /usr/lib/arm-linux-gnueabihf/libssl.so.1.1 (0x7572c000)
libcrypto.so.1.0.2 => /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.0.2 (0x75ac3000)
libcrypto.so.1.1 => /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.1 (0x754c6000)