在Crypto ++库中找不到hkdf.h

时间:2018-10-19 20:37:57

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

我无法将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

3 个答案:

答案 0 :(得分:1)

  

编译命令:

name=raw_input("Enter ur name ")
gender=raw_input("Enter ur gender ")
if gender=="f":
    age=float(raw_input("enter ur age "))
    if 10<= age <=12:
        print "ur eligible"
    else:
        print "ur not eligible"
elif gender=="m":
     print "male not allowed"
else:
    print 'gender should be "m" (male) or "f" (female)'

这不能回答您的问题。只是一个提示...

请注意g++ -std=c++11 mycode.cpp -lcryptopp 。库和程序必须使用几乎相同的选项来构建。我不相信Debian使用g++ -std=c++11 mycode.cpp -lcryptopp,所以您不应该使用它。

“使用几乎相同的选项” 规则适用于所有发行版和所有C ++库;而不仅仅是Debian上的Crypto ++。如果对Fedora上的PCRE库执行相同的操作,将会遇到类似的问题。

您可以在Debian Package Auto-Building | Crypto++上检查Debian用于构建库的标志。 Debian使用的标志是:

-std=c++11

出于您的目的,重要标志是-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。但是,您必须自己从源代码下载并构建库,以确保库和程序使用相同的标志。

如果您自己构建库,请参阅Crypto ++ Wiki上的GNUmakefile | Building the Library

如果您自己构建库,请帮个忙,并删除发行版提供的库版本。类似于-std=c++11。否则,您会无意间将它们混合和匹配。

答案 1 :(得分:0)

  

无法将crypto ++库中的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 ++的人员)。如果您提供了分发的详细信息以及它们提供的库版本,我们可以说更多。

请冒险猜测... 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。

答案 2 :(得分:-1)

  

我的操作系统是Ubuntu 16.04

这是您的答案。 Ubuntu是Debian的衍生产品。 Debian将Crypto ++头文件安装在/usr/include/crypto++中,而不是/usr/include/cryptopp中。因此,您应该#include <crypto++/hkdf.h>

您可以在File list of package libcrypto++-dev in stretch of architecture amd64(和朋友)处看到Debian软件包的内容:

/usr/include/crypto++/3way.h
/usr/include/crypto++/adler32.h
/usr/include/crypto++/aes.h
/usr/include/crypto++/algebra.h
...

ls /usr/include/cryptopp应该告诉您出了什么问题。