我已经在我的系统上构建并安装了 openssl 1.1.1:
openssl version
OpenSSL 1.1.1h-dev xx XXX xxxx
Run Code Online (Sandbox Code Playgroud)
各自的libcrypto.so和libssl.so位于/usr/local/lib64, 标题中/usr/local/include。我创建/etc/ld.so.conf.d/usrlocal.conf并添加/usr/local/lib64到那里以确保 .so 是可加载的。
有一个旧版本(1.0.2)/usr/lib64/,/usr/include我需要保留其他依赖项。
我正在尝试编译需要的OQS 库( https://github.com/open-quantum-safe/liboqs )
find_package(OpenSSL 1.1.1 REQUIRED)
Run Code Online (Sandbox Code Playgroud)
当我尝试编译库时,我得到
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)
Run Code Online (Sandbox Code Playgroud)
我尝试设置OPENSSL_ROOT_DIR为几乎任何可以想象的值,但没有任何结果;错误仍然存在。
在我看来,cmake只尝试检查OPENSSL_ROOT_DIR最后一次尝试,并且在找到第一个合适的版本后终止对适当库版本的探索......
现在问题很明显 -如何强制 CMAKE 找到合适的 OpenSSL 版本?
(在下次更新中揭穿)正如 @Tsyvarev 在评论中建议的那样,将 OPENSSL_ROOT_DIR 设置为环境变量会有所帮助。这意味着set(OPENSSL_ROOT_DIR ...)CMakeLists.txt 或-DOPENSSL_ROOT_DIRwithcmake命令中没有,但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'
Run Code Online (Sandbox Code Playgroud)
我实际上在另一个 CMakeLists.txt 中通过FetchContent以下方式使用 OQS:
FetchContent_Declare(liboqs
GIT_REPOSITORY https://github.com/onavratil-monetplus/liboqs
#GIT_TAG 0.2.0
)
Run Code Online (Sandbox Code Playgroud)
我制作了自定义分支并调整了它们的 CMakeLists.txt 以导出目标,以便我可以将适当的依赖项链接到我的二进制文件cmake:
target_link_libraries(myexecutable PUBLIC OQS::oqs)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我让 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有效。
| 归档时间: |
|
| 查看次数: |
20294 次 |
| 最近记录: |