我已经在我的系统上构建并安装了 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 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Cmake 构建一个项目并用于FetchContent管理依赖项。由于多种原因,我不能依赖系统范围内安装的软件包,因此这个软件包有很大帮助。它允许我做这样的事情:
cmake_minimum_required(VERSION 3.14)
project(dummy LANGUAGES C CXX)
include(FetchContent)
FetchContent_Declare(nlohmann
GIT_REPOSITORY https://github.com/onavratil-monetplus/json
GIT_TAG v3.7.3
)
FetchContent_MakeAvailable(nlohmann)
add_executable(dummy main.cpp)
target_link_libraries(dummy PUBLIC nlohmann_json::nlohmann_json)
Run Code Online (Sandbox Code Playgroud)
现在,只要存储库是带有CMakeLists.txt. 我很乐意对非 cmake 项目使用类似的方法,例如 Botan 库。显然
FetchContent_Declare(botan
GIT_REPOSITORY https://github.com/onavratil-monetplus/botan
GIT_TAG 2.17.2
)
FetchContent_MakeAvailable(botan)
Run Code Online (Sandbox Code Playgroud)
并没有真正完成这项工作,构建不会运行,因为它不是一个 cmake 项目。有人会考虑添加
CONFIGURE_COMMAND "<SOURCE_DIR>/configure.py --prefix=<BINARY_DIR>"
BUILD_COMMAND "cd <SOURCE_DIR> && make"
Run Code Online (Sandbox Code Playgroud)
或类似于声明命令的命令,但FetchContent文档明确表示这些特定参数在传递给FetchContent.
现在斗争是显而易见的 - 如何FetchContent在这种情况下正确使用?我正在考虑ExternalProject_Add在 fetchcontent 之后使用,但 fetchcontent 似乎没用(ExternalProject 也可以下载 git repo)。此外,我想在配置时使用 botan 的一些目标(如果有意义的话)。
我有一类NoCopy是可移动的,但不是可复制的。
我需要制作3 个NoCopy. 我可以创建一个空的,但无法添加任何元素。
我可以制作一个std::vector<NoCopy>orstd::queue<NoCopy>并填充它们。但不是为了std::vector<std::queue<NoCopy>>.
MWE:
#include <iostream>
#include <vector>
#include <queue>
class NoCopy{
public:
NoCopy() = default;
NoCopy& operator = (const NoCopy&) = delete;
NoCopy(const NoCopy&) = delete;
NoCopy(NoCopy&&) = default;
NoCopy& operator = (NoCopy&&) = default;
};
using QNC = std::queue<NoCopy>;
int main(void) {
QNC q;
q.push(std::move(NoCopy()));
std::vector<NoCopy> ncvec;
ncvec.emplace_back();
std::cout << "Queue size " << q.size() << ", vector size: " << …Run Code Online (Sandbox Code Playgroud)