c++ - 在 Crypto++ 库中找不到 hkdf.h
问题描述
我无法将 crypto++ 库中的 hkdf.h 包含到我的代码中。
它说cryptopp/hkdf.h not found
。虽然我可以将同一个库中的其他部分导入到我的代码中,例如cryptopp/sha.h
我正在使用g++
with the-std=c++11
和-lcryptopp
flags
我查看了文档,它建议了-lcryptopp
我正在使用的标志。这不应该是一个问题,我错过了什么吗?
编辑1:
编译命令:
g++ -std=c++11 mycode.cpp -lcryptopp
编辑2:
如何检查我的 crypto++ 库的版本?下载命令是:
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 Package Auto-Building |查看 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
。否则你会无意中混合和匹配它们。
推荐阅读
- ios - 尝试绘制 touchesBegan 时出现 CGContext 错误
- excel - SSIS 动态导入 Excel 文件
- firebase - 加载项收到访问活动工作表和用户信息的错误
- java - 如何在数组 Java 中使用 lambda
- azure - “无法连接 Net/http:TLS 握手超时”——为什么 Kubectl 无法连接到 Azure Kubernetes 服务器?(AKS)
- android - 在 Google Play >封闭测试版<应用程序中使用 Facebook 登录
- r - 在整洁的语料库 R 中快速搜索字符串
- momentjs - 如何使用 Momentjs 从特定日期查找前一个工作日(周日、周一等)
- npm - 500 内部服务器错误:npm@latest
- sql - 使用两组标准连接两个数据库