我已经在我的系统上构建了&安装了OpenSSL1.1.1:
openssl version
OpenSSL 1.1.1h-dev xx XXX xxxx
分别的libcrypto.so
和libssl.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),它需要
find_package(OpenSSL 1.1.1 REQUIRED)
当我试图编译库时,我得到
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的问题,但这一次我相信它们是由另一个问题引起的。
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,如:
FetchContent_Declare(liboqs
GIT_REPOSITORY https://github.com/onavratil-monetplus/liboqs
#GIT_TAG 0.2.0
)
我制作了我的自定义分叉,并调整了它们的CMakeLists.txt以导出目标,这样我就可以将适当的依赖项链接到cmake
中的二进制文件中。
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
也能工作。
发布于 2022-10-25 17:45:29
我安装了libssl-dev (正如在失败的cmake构建输出的底部建议的那样),它第一次工作。
发布于 2022-06-08 11:31:02
当我需要Android项目的openssl时,我遇到了问题。在这个场景中,它帮助通过gradle导入openssl,然后链接像描述的这里那样的获取库
https://stackoverflow.com/questions/61954171
复制相似问题