c++ - 在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?
解决方案
推荐阅读
- firebase - 如何在firestore中的数百万数据中进行分页?
- oracle - 将 Oracle 表单 6I 迁移到 12C
- c# - 启动 exe 时在托盘图标应用程序中触发事件?
- mongodb - mongodb 查询对列进行计数和分组
- node.js - aws弹性搜索http请求,错误“批量请求必须由换行符终止”
- java - Wildfly 服务器在非 Windows 环境中失败并出现错误 WFLYCTL0017 && WFLYCTL0013
- python - 如何在 Django 中设置电子邮件字段?
- unity3d - Vimeo unity SDK:有没有办法使用团队成员的授权来访问主要用户的视频?
- reactjs - 当我在 heroku 中将它投入生产时,我的反应应用程序无法正常工作,无法 GET /
- javascript - 添加动画后画布像素化