error: ‘GlobalRNG’ was not declared in this scope
error: ‘GlobalRNG’ was not declared in this scope
我正在使用 Crypto++ 在 C++ 中加密文件。我正在使用下面的代码。
它不包含头文件,所以我添加了自己的头文件:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <cryptopp/cryptlib.h>
#include <cryptopp/sha.h>
#include <cryptopp/secblock.h>
#include <cryptopp/files.h>
#include <cryptopp/queue.h>
#include <cryptopp/hex.h>
#include <cryptopp/base64.h>
#include <cryptopp/filters.h>
#include <cryptopp/osrng.h>
#include <cryptopp/integer.h>
#include <cryptopp/dh.h>
#include <cryptopp/sha.h>
#include <cryptopp/modes.h>
#include <cryptopp/eax.h>
#include <cryptopp/tea.h>
#include <cryptopp/blowfish.h>
#include <cryptopp/pssr.h>
#include <cryptopp/rsa.h>
#include <cryptopp/nbtheory.h>
#include <cryptopp/eccrypto.h>
#include <cryptopp/oids.h>
#include <cryptopp/modes.h>
#include <cryptopp/gzip.h>
#include <cryptopp/blowfish.h>
#include <cryptopp/rsa.h>
#include <cryptopp/rng.h>
#include <cryptopp/cryptlib.h>
#include <cryptopp/filters.h>
#include <cryptopp/rdrand.h>
using namespace std;
using namespace CryptoPP;
但不幸的是代码不起作用
表示未声明 GlobalRNG !
error: ‘GlobalRNG’ was not declared in this scope
我用谷歌搜索并一直在寻找解决方案 2 天,我发现这是一个错误并已修复,但我使用的是最新版本:5.6.3!
所以我真的不知道为什么会出现这个错误!
版本5.6.3 GlobalRNG
在文件validate.h
中定义为:
// Functions that need a RNG; uses AES inf CFB mode with Seed.
CryptoPP::RandomNumberGenerator & GlobalRNG();
只需添加以下内容:
#include <cryptopp/validate.h>
解决定义问题。
GloablaRNG
是测试和基准测试的一部分。它不应该是库本身的一部分(即 libcryptopp.a
或 libcryptopp.so
)。如果您的程序抱怨缺少 GloablaRNG
,那么该库已被一些测试和基准测试设备交叉污染。
这些是用于测试和基准测试的文件。它们应该 而不是 包含在您构建的库或项目中:
- validate.h
bench.h
test.cpp
- bench1.cpp、bench2.cpp
- validat0.cpp、validat1.cpp、validat2.cpp、validat3.cpp
- datatest.cpp, regtest.cpp, fipsalgt.cpp, dlltest.cpp
您可以自由使用名为 GlobalRNG()
的功能。这是它在图书馆的测试和基准测试设备中的使用方式。但是您可以考虑改用 AutoSeededRandomPool
。 AutoSeededRandomPool
是一个 PGP 风格的生成器,它的种子来自 /dev/urandom
、/dev/srandom
、/dev/random
或 Windows 熵池。
validate.h
中的声明
NAMESPACE_BEGIN(CryptoPP)
NAMESPACE_BEGIN(Test)
CryptoPP::RandomNumberGenerator & GlobalRNG();
NAMESPACE_END // Test
NAMESPACE_END // CryptoPP
定义在test.cpp
NAMESPACE_BEGIN(CryptoPP)
NAMESPACE_BEGIN(Test)
ANONYMOUS_NAMESPACE_BEGIN
OFB_Mode<AES>::Encryption s_globalRNG;
NAMESPACE_END
RandomNumberGenerator & GlobalRNG()
{
return dynamic_cast<RandomNumberGenerator&>(s_globalRNG);
}
NAMESPACE_END // Test
NAMESPACE_END // CryptoPP
在test.cpp
播种
// Don't do this in production because it creates a deterministic generator
OFB_Mode<AES>::Encryption& aesg = dynamic_cast<OFB_Mode<AES>::Encryption&>(Test::GlobalRNG());
aesg.SetKeyWithIV((byte *)seed.data(), 16, (byte *)seed.data());
多年来,很多人都遇到过这个问题。在 Crypto++ 6.0 中,我们将 GlobalRNG()
移到了 Test
命名空间中。 Test
是一个新的命名空间,我们希望 Test::GlobalRNG()
能够提供信号,表明您的库构建或项目配置存在问题。
另见 Issue 379, Add Test namespace within CryptoPP namespace and Commit 73836e58a5f5c11c。
我正在使用 Crypto++ 在 C++ 中加密文件。我正在使用下面的代码。
它不包含头文件,所以我添加了自己的头文件:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <cryptopp/cryptlib.h>
#include <cryptopp/sha.h>
#include <cryptopp/secblock.h>
#include <cryptopp/files.h>
#include <cryptopp/queue.h>
#include <cryptopp/hex.h>
#include <cryptopp/base64.h>
#include <cryptopp/filters.h>
#include <cryptopp/osrng.h>
#include <cryptopp/integer.h>
#include <cryptopp/dh.h>
#include <cryptopp/sha.h>
#include <cryptopp/modes.h>
#include <cryptopp/eax.h>
#include <cryptopp/tea.h>
#include <cryptopp/blowfish.h>
#include <cryptopp/pssr.h>
#include <cryptopp/rsa.h>
#include <cryptopp/nbtheory.h>
#include <cryptopp/eccrypto.h>
#include <cryptopp/oids.h>
#include <cryptopp/modes.h>
#include <cryptopp/gzip.h>
#include <cryptopp/blowfish.h>
#include <cryptopp/rsa.h>
#include <cryptopp/rng.h>
#include <cryptopp/cryptlib.h>
#include <cryptopp/filters.h>
#include <cryptopp/rdrand.h>
using namespace std;
using namespace CryptoPP;
但不幸的是代码不起作用
表示未声明 GlobalRNG !
error: ‘GlobalRNG’ was not declared in this scope
我用谷歌搜索并一直在寻找解决方案 2 天,我发现这是一个错误并已修复,但我使用的是最新版本:5.6.3!
所以我真的不知道为什么会出现这个错误!
版本5.6.3 GlobalRNG
在文件validate.h
中定义为:
// Functions that need a RNG; uses AES inf CFB mode with Seed.
CryptoPP::RandomNumberGenerator & GlobalRNG();
只需添加以下内容:
#include <cryptopp/validate.h>
解决定义问题。
GloablaRNG
是测试和基准测试的一部分。它不应该是库本身的一部分(即 libcryptopp.a
或 libcryptopp.so
)。如果您的程序抱怨缺少 GloablaRNG
,那么该库已被一些测试和基准测试设备交叉污染。
这些是用于测试和基准测试的文件。它们应该 而不是 包含在您构建的库或项目中:
- validate.h
bench.h
test.cpp
- bench1.cpp、bench2.cpp
- validat0.cpp、validat1.cpp、validat2.cpp、validat3.cpp
- datatest.cpp, regtest.cpp, fipsalgt.cpp, dlltest.cpp
您可以自由使用名为 GlobalRNG()
的功能。这是它在图书馆的测试和基准测试设备中的使用方式。但是您可以考虑改用 AutoSeededRandomPool
。 AutoSeededRandomPool
是一个 PGP 风格的生成器,它的种子来自 /dev/urandom
、/dev/srandom
、/dev/random
或 Windows 熵池。
validate.h
中的声明NAMESPACE_BEGIN(CryptoPP)
NAMESPACE_BEGIN(Test)
CryptoPP::RandomNumberGenerator & GlobalRNG();
NAMESPACE_END // Test
NAMESPACE_END // CryptoPP
定义在test.cpp
NAMESPACE_BEGIN(CryptoPP)
NAMESPACE_BEGIN(Test)
ANONYMOUS_NAMESPACE_BEGIN
OFB_Mode<AES>::Encryption s_globalRNG;
NAMESPACE_END
RandomNumberGenerator & GlobalRNG()
{
return dynamic_cast<RandomNumberGenerator&>(s_globalRNG);
}
NAMESPACE_END // Test
NAMESPACE_END // CryptoPP
在test.cpp
播种// Don't do this in production because it creates a deterministic generator
OFB_Mode<AES>::Encryption& aesg = dynamic_cast<OFB_Mode<AES>::Encryption&>(Test::GlobalRNG());
aesg.SetKeyWithIV((byte *)seed.data(), 16, (byte *)seed.data());
多年来,很多人都遇到过这个问题。在 Crypto++ 6.0 中,我们将 GlobalRNG()
移到了 Test
命名空间中。 Test
是一个新的命名空间,我们希望 Test::GlobalRNG()
能够提供信号,表明您的库构建或项目配置存在问题。
另见 Issue 379, Add Test namespace within CryptoPP namespace and Commit 73836e58a5f5c11c。