我无法将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
答案 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
应该告诉您出了什么问题。