hkdf.h 在 Crypto++ 库中找不到
hkdf.h not found in Crypto++ library
我不能将加密++库中的hkdf.h包含在我的代码中。
它说cryptopp/hkdf.h not found
.尽管我可以将同一库中的其他部分导入到我的代码中,例如cryptopp/sha.h
我正在使用带有-std=c++11
和-lcryptopp
标志的g++
我查看了文档,它建议我正在使用-lcryptopp
标志。这应该不是问题,我错过了什么吗?
编辑 1:
编译命令:
g++ -std=c++11 mycode.cpp -lcryptopp
编辑 2:
如何检查我的加密++库的版本? 下载命令是:
sudo apt-get install libcrypto++-dev
我的操作系统是 Ubuntu 16.04
编译命令:
g++ -std=c++11 mycode.cpp -lcryptopp
这不能回答你的问题。这只是一个提醒...
小心g++ -std=c++11 mycode.cpp -lcryptopp
。库和程序必须使用大致相同的选项进行构建。我不相信 Debian 使用-std=c++11
,所以你不应该使用它。
"使用几乎相同的选项">规则适用于所有发行版和所有C++库;而不仅仅是 Debian 上的 Crypto++。如果你对 Fedora 上的 PCRE 库做同样的事情,你会遇到类似的问题。
您可以在 Debian 软件包自动构建 |加密++。Debian 使用的标志是:
-DHAVE_CONFIG_H -I. -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2
-fstack-protector-strong -Wformat -Werror=format-security
-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS -DNDEBUG -fPIC -DPIC
出于您的目的,重要的标志是-g -O2 -DNDEBUG -fPIC
。这些标志是您应该在程序中使用的标志。-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS
在文件config.h
中应用,因此无需在命令行上传递它。(最近删除了未对齐的访问,因为它导致了太多问题,因此您甚至不必担心将来-DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS
(。
如果您愿意,可以使用-std=c++11
。但是,您必须自己从源代码下载并构建库,以确保库和程序使用相同的标志。
如果您自己构建库,请参阅 GNUmakefile |在 Crypto++ wiki 上构建库。
如果您自己构建库,请帮自己一个忙并删除发行版提供的库版本。像sudo apt-get remove --purge libcrypto++ libcrypto++-dev libcrypto++-dbg
.否则,您将无意中混合和匹配它们。
不能将加密++库中的hkdf.h包含在我的代码中。
它说 cryptopp/hkdf.h 未找到。
HKDF
是在 Crypto++ 5.6.3 中添加的。旧版本的库没有它,就像 Ubuntu 14 或 CentOS 5 上提供的一样。
它是使用文件hkdf.h
的仅标头实现。您可以下载它并将其放在 Crypto++ 安装目录中。也许像下面这样 Crypto++ 5.6.3:
# Crypto++ 5.6.3
wget https://raw.githubusercontent.com/weidai11/cryptopp/217cb1f983c6/hkdf.h
sudo cp hkdf.h /usr/include/cryptopp/
密钥派生函数接口在 Crypto++ 7.0 中发生了更改。更准确地说,在 Crypto++ 7.0 中,我们添加了一个基类用作接口(以前没有(。基类是KeyDerivationFunction
的,它允许我们改进键派生函数类的自测试。所以也许像下面这样的东西 Crypto++ 7.0:
# Crypto++ 7.0
wget https://raw.githubusercontent.com/weidai11/cryptopp/c8d8caf70074/hkdf.h
sudo cp hkdf.h /usr/include/cryptopp/
总结一下:
- Crypto++ 5.6.3:您只需要提供HKDF的文件
- Crypto++ 7.0:您需要同时提供
KeyDerivationFunction
和HKDF的文件。
换句话说,如果您尝试将 Crypto++ 7.0 HKDF 与 Crypto++ 5.6.2 一起使用,那么它将永远不会编译,因为库中缺少KeyDerivationFunction
。
这应该不是问题,我错过了什么吗?
我认为您的问题可能取决于您的发行版(或提供 Crypto++ 的任何人(。如果您提供发行版的详细信息以及它们提供的库版本,我们可以说更多。
冒昧地猜测...Debian 和 Fedora 与 Crypto++ 版本保持同步。或者他们在过去的几年里一直如此。所以你可能没有使用Debian 8,Ubuntu 17,Fedora 22或它们各自的变体。
但是,您可能使用的是 Debian 7 或更早版本、Ubuntu 12 或更早版本、Fedora 21 或更早版本。在这种情况下,我相信您使用的是Crypto++ 5.6.2。
我相信Gentoo,BSD和其他一些在发布曲线上落后了。据我所知,一些发行版仍在提供Crypto++ 5.6.2。
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- hkdf.h 在 Crypto++ 库中找不到
- 使用 msvc /MDd cryptlib.lib 构建 Crypto++ 链接时找不到 cryptopp.lib
- 在 vscode 上找不到'openssl/crypto.h'文件