首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于cmake的OPENSSL_ROOT_DIR

用于cmake的OPENSSL_ROOT_DIR
EN

Stack Overflow用户
提问于 2020-05-22 11:39:06
回答 2查看 11.6K关注 0票数 4

我已经在我的系统上构建了&安装了OpenSSL1.1.1

代码语言:javascript
运行
复制
openssl version
OpenSSL 1.1.1h-dev  xx XXX xxxx

分别的libcrypto.solibssl.so/usr/local/lib64中,标头在/usr/local/include中。我创建了/etc/ld.so.conf.d/usrlocal.conf,并在那里添加了/usr/local/lib64,以确保.so是可加载的。

--在/usr/lib64//usr/include中有一个旧版本(1.0.2),对于其他依赖项,我需要保留它们。

我正在尝试编译OQS库(https://github.com/open-quantum-safe/liboqs),它需要

代码语言:javascript
运行
复制
find_package(OpenSSL 1.1.1 REQUIRED)

当我试图编译库时,我得到

代码语言:javascript
运行
复制
CMake Error at /usr/local/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR: Found unsuitable version "1.0.2k", but
  required is at least "1.1.1" (found /usr/lib64/libcrypto.so)
Call Stack (most recent call first):
  /usr/local/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:443 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/share/cmake-3.17/Modules/FindOpenSSL.cmake:450 (find_package_handle_standard_args)
  CMakeLists.txt:26 (find_package)

我已经尝试过将OPENSSL_ROOT_DIR设置为几乎可以想象的任何值,而不会有任何结果;错误仍然存在。

在我看来,cmake只尝试检查OPENSSL_ROOT_DIR作为最后一次尝试,并且在找到第一个合适的版本之后,它终止了对适当库版本的探索.

现在的问题很明显--如何强迫CMAKE找到合适的OpenSSL版本?

更新

正如@Tsyvarev在注释中建议的那样,(在下一次更新中揭穿),将OPENSSL_ROOT_DIR设置为环境变量有所帮助。这意味着set(OPENSSL_ROOT_DIR ...)在CMakeLists.txt或-DOPENSSL_ROOT_DIR中没有cmake命令,但是export OPENSSL_ROOT_DIR=...帮助find_package找到了正确的版本。

我仍然遇到OQS的问题,但这一次我相信它们是由另一个问题引起的。

代码语言:javascript
运行
复制
lib/liboqs.a(fips202x4.c.o): In function `keccak_squeezeblocks4x.constprop.1':
fips202x4.c:(.text.keccak_squeezeblocks4x.constprop.1+0x6b): undefined reference to `KeccakP1600times4_PermuteAll_24rounds'

更新2

实际上,我在另一个CMakeLists.txt中通过FetchContent使用OQS,如:

代码语言:javascript
运行
复制
FetchContent_Declare(liboqs 
    GIT_REPOSITORY https://github.com/onavratil-monetplus/liboqs 
    #GIT_TAG 0.2.0 
) 

我制作了我的自定义分叉,并调整了它们的CMakeLists.txt以导出目标,这样我就可以将适当的依赖项链接到cmake中的二进制文件中。

代码语言:javascript
运行
复制
target_link_libraries(myexecutable PUBLIC OQS::oqs)

奇怪的是,如果让OQS自己找到OpenSSL,就会得到与原来的答案相同的结果--不管我是使用-D、set()还是export =。但是,如果在我的顶层CMakeLists.txt上手动调用find_package(OpenSSL 1.1.1 REQUIRED),它就会成功,相应的变量OPENSSL_FOUND等将被正确设置并编译OQS。顺便说一下,我使用的是cmake版本3.17.2。

毕竟,正是这个编辑(自己找到OPENSSL )解决了这个问题,这样,-DOPENSSL_ROOT_DIR=/usr/local也能工作。

EN

回答 2

Stack Overflow用户

发布于 2022-10-25 17:45:29

我安装了libssl-dev (正如在失败的cmake构建输出的底部建议的那样),它第一次工作。

票数 2
EN

Stack Overflow用户

发布于 2022-06-08 11:31:02

当我需要Android项目的openssl时,我遇到了问题。在这个场景中,它帮助通过gradle导入openssl,然后链接像描述的这里那样的获取库

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61954171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档