首页 > 解决方案 > 在cmake find_package中组件版本!=包版本正常吗?

问题描述

我的环境:

cmake version 3.16.3
OpenSSL 1.1.0f  25 May 2017
cpp-httplib v0.7.0

我的系统根

-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

cpp-httplib 中的 CMakeLists.txt 详细说明:

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
)

我在我的项目中包含了cpp-httplib,我构建了它并使用ldd检查了共享对象,然后我得到了

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)

我了解由于未设置 EXACT 选项,版本不完全匹配。但是为什么 libssl 只链接到 1.1 而 libcrypto 链接到 1.0.2 和 1.1?

标签: c++cmake

解决方案


推荐阅读