我不能将crypto++库中的hkdf.h包含到我的代码中。
上面写着cryptopp/hkdf.h not found。尽管我可以将其他部分从同一个库导入到代码中,例如cryptopp/sha.h
我使用的是g++和-std=c++11和-lcryptopp标志
我查看了文档,它建议我使用的-lcryptopp标志。这不应该是个问题,我是不是漏掉了什么?
编辑1:
编译命令:
g++ -std=c++11 mycode.cpp -lcryptopp编辑2:
如何检查我的crypto++库的版本?下载命令是:
sudo apt-get install libcrypto++-dev我的操作系统是Ubuntu 16.04
发布于 2018-10-20 00:32:26
不能将crypto++库中的hkdf.h包含到我的代码中。 上面说找不到密码/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/概括地说:
KeyDerivationFunction和HKDF的文件。换句话说,如果您尝试在Crypto++ 5.6.2中使用Crypto++ 7.0 HKDF,那么它将永远不会编译,因为库中缺少了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。
发布于 2018-10-21 02:09:18
编译命令: 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 Crypto++构建库的标志。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 -建设图书馆 wiki上看到Crypto++。
如果你自己构建库,那么帮你自己一个忙,删除发行版的库。有点像sudo apt-get remove --purge libcrypto++ libcrypto++-dev libcrypto++-dbg。否则,您将无意中混合和匹配它们。
https://stackoverflow.com/questions/52899602
复制相似问题