首页 > 解决方案 > 在 Crypto++ 库中找不到 hkdf.h

问题描述

我无法将 crypto++ 库中的 hkdf.h 包含到我的代码中。

它说cryptopp/hkdf.h not found。虽然我可以将同一个库中的其他部分导入到我的代码中,例如cryptopp/sha.h

我正在使用g++with the-std=c++11-lcryptoppflags

我查看了文档,它建议了-lcryptopp我正在使用的标志。这不应该是一个问题,我错过了什么吗?

编辑1:

编译命令:

g++ -std=c++11 mycode.cpp -lcryptopp

编辑2:

如何检查我的 crypto++ 库的版本?下载命令是:

sudo apt-get install libcrypto++-dev

我的操作系统是 Ubuntu 16.04

标签: c++c++11g++crypto++

解决方案


编译命令:

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。否则你会无意中混合和匹配它们。


推荐阅读