- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Windows 中编译 cryptopp 项目时遇到以下错误。
C:\Users\Sajith\AppData\Local\Temp\ccxq8O8x.o:aescbc.cpp:(.text$_ZN8CryptoPP20AllocatorWithCleanupIhLb1EE8allocateEjPKv[
__ZN8CryptoPP20AllocatorWithCleanupIhLb1EE8allocateEjPKv]+0x2e): undefined reference to `CryptoPP::AlignedAllocate(unsig
ned int)'
C:\Users\Sajith\AppData\Local\Temp\ccxq8O8x.o:aescbc.cpp:(.text$_ZN8CryptoPP20AllocatorWithCleanupIhLb1EE10deallocateEPv
j[__ZN8CryptoPP20AllocatorWithCleanupIhLb1EE10deallocateEPvj]+0x28): undefined reference to `CryptoPP::AlignedDeallocate
(void*)'
collect2.exe: error: ld returned 1 exit status
下面是我的编译命令:
mingw32-g++.exe -o .\aestest2.exe .\aescbc.cpp -I "C:\cryptopp\Include" -L "C:\cryptopp\Lib" -lcryptopp
我的 libcryptopp.a 位于 C:\cryptopp\Lib
我试图找出 AlignedDeallocate
的声明位置,但我找不到。
引发此错误的程序部分如下:
try
{
cout << "plain text: " << plain << endl;
CBC_Mode< AES >::Encryption e;
e.SetKeyWithIV(key, sizeof(key), iv);
// The StreamTransformationFilter removes
// padding as required.
StringSource s(plain, true,
new StreamTransformationFilter(e,
new StringSink(cipher)
) // StreamTransformationFilter
); // StringSource
#if 0
StreamTransformationFilter filter(e);
filter.Put((const byte*)plain.data(), plain.size());
filter.MessageEnd();
const size_t ret = filter.MaxRetrievable();
cipher.resize(ret);
filter.Get((byte*)cipher.data(), cipher.size());
#endif
}
catch(const CryptoPP::Exception& e)
{
cerr << e.what() << endl;
exit(1);
}
建议表示赞赏!
最佳答案
AlignedAllocate
在 misc.h
中:
$ grep -I AlignedAllocate *
misc.cpp:void * AlignedAllocate(size_t size)
misc.h:CRYPTOPP_DLL void * CRYPTOPP_API AlignedAllocate(size_t size);
secblock.h: return (pointer)AlignedAllocate(n*sizeof(T));
和:
$ grep -R AlignedDeallocate *
misc.cpp:void AlignedDeallocate(void *p)
misc.h:CRYPTOPP_DLL void CRYPTOPP_API AlignedDeallocate(void *p);
secblock.h: return AlignedDeallocate(p);
但是,他们受到保护:
#if CRYPTOPP_BOOL_ALIGN16_ENABLED
CRYPTOPP_DLL void * CRYPTOPP_API AlignedAllocate(size_t size);
CRYPTOPP_DLL void CRYPTOPP_API AlignedDeallocate(void *p);
#endif
CRYPTOPP_BOOL_ALIGN16_ENABLED
在 config.h
中设置:
#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE || CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE || defined(CRYPTOPP_X64_MASM_AVAILABLE)
#define CRYPTOPP_BOOL_ALIGN16_ENABLED 1
#else
#define CRYPTOPP_BOOL_ALIGN16_ENABLED 0
#endif
在 Crypto++ 在内部做出选择后,您可以考虑将以下内容添加到 config.h
:
#undef CRYPTOPP_BOOL_ALIGN16_ENABLED
#define CRYPTOPP_BOOL_ALIGN16_ENABLED 1
然后,重建库和您的程序。
可能发生的其他事情是:MinGW 正在禁用 MMX/SSE/SSE2 的机器上构建库。或者他们可能正在使用 g++ -mno-sse -mno-sse2 ...
。
然后,你有了一个 Shiny 的新 Intel 或 AMD,并且基于 g++ 启用的内容和 config.h
中的定义,你的程序需要 AlignedAllocate
和AlignedDeallocate
因为您的配置包括 MMX/SSE/SSE2...
这种情况在 config.h | Recommendations 中讨论在 Crypto++ 维基上。这就是为什么我们告诉发行版在 config.h
中启用和禁用某些东西,而不是从命令行。修改 config.h
确保发行版和用户程序大部分使用相同的设置。
如果是这种情况,那么您可以尝试:
export CXXFLAGS="-DNDEBUG -g2 -O2 -mno-sse -mno-sse2"
mingw32-g++.exe $CXXFLAGS -o .\aestest2.exe .\aescbc.cpp \
-I "C:\cryptopp\Include" -L "C:\cryptopp\Lib" -lcryptopp
有大量基于 MMX/SSE/SSE2 的级联定义;见config.h | Assembly Defines在维基上。由于禁用了 MMX/SSE/SSE2,您将获得 AES 的纯软件实现。它不会发挥应有的性能。
关于c++ - 链接时未定义对 CryptoPP::AlignedAllocate 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002527/
我正在尝试使用 cryptopp,以下代码会导致 stringsource 函数发生访问冲突。这可能是什么原因?我以前成功运行过类似的代码,几乎没有什么区别。 AesHelper.cpp #inclu
我试图在 Arch Linux (3.12.9) 上通过 cabal 安装 happstack-server-tls 包,但出现了这个错误: Resolving dependencies... Con
我在 IOS 中成功编译并执行了 Cryptopp,但我真的很难在 Android 中使用它。 在这里,我使用的是 Cryptopp 5.6.3、NDK r10e 和 android studio 1
我有一个在 CBC 模式下使用 AES 算法的加密文件。我有数据库中的 key 。我正在尝试使用 cryptopp 5.6.2 库编译以下代码。它在没有 -Wall 标志的情况下编译,但是当我在下面启
这是 log1 应用程序输出: : ... 25 more W/System.err( 1500): java.lang.ClassNotFoundException: android.g
我正在玩 cryptopp,但在 Base64 编码/解码方面遇到了问题。 在下面的代码中,假设 sig 的值应该等于 tsig,但是它们在最后一个字符上是不同的(sig 比 >tsig 一个符号)。
我是第一次玩 Cryptopp,我找到了一个编码为十六进制的示例……一切都很好。现在我想将生成的 std::string 解码为原始字符串,但我得到的只是空字符串。 #include "stdafx.
我正在尝试运行一个使用 AES 加密和解密的程序。 (来自 http://www.codeproject.com/KB/security/AESProductKey.aspx) // From aes
我正在尝试用 C++ 中的 RSA 加密一些文本, 加密时我正在生成 n, e, d但是在尝试解密时,私钥初始值设定项说 key 无效... 所以我构建了一个生成 key 的代码,然后尝试在此之后立即
我正在尝试加密已解析为字符串的字节数组。这似乎适用于所有情况,但字节数组包含 0x00 的情况除外。 int main() { byte cipherTextWithZeroByte[32]
谁能分享一个有效的 RabinMillerTest() 示例?遗憾的是,我的 googlefu 不见了。 这是我的测试代码: #include "integer.h" #include "nbtheo
Crypto++ 库通过针对 cryptlib.lib 和 cryptopp.lib 进行编译来支持后期绑定(bind)。这需要使用 cryptopp.dll。当尝试通过 /DELAYLOAD:cry
我有要解密的流。我将它分成 block 并将每个 block 传递给下面的方法。我需要解密的数据是按 16 字节的 block 加密的,如果最后一个 block 小于 16,那么其余所有字节都用填充填
我在 Windows 中编译 cryptopp 项目时遇到以下错误。 C:\Users\Sajith\AppData\Local\Temp\ccxq8O8x.o:aescbc.cpp:(.text$_
我发现在 RHEL7 和 Debian9 上使用 cryptopp 生成 SHA3 哈希的行为存在非常奇怪的差异。如果我改用 SHA1 或 MD5 哈希,则两个平台上的输出是相同的。我已将其缩减为以下
如何将 cryptopp::integer 转换为 QString? 如果这很重要,我会在 Mac OS 上工作。我完全不知道该怎么做,只是尝试使用 QCA,但它还不够好! 最佳答案 How to c
我正在尝试使用 Crypto++ 在编译时散列一些字符串(不需要检索它们)库和一个 constexpr 函数。这是我到目前为止的代码: constexpr const char* operator "
我的程序可以加密文本并将其保存在文件中,并在从文件中获取密文后解密。 但我一直收到这个错误 terminate called after throwing an instance of 'Crypto
这个问题在这里已经有了答案: How to convert CryptoPP::Integer to char* (4 个答案) 关闭 6 年前。 我找不到将 CryptoPP::Integer(从
我对 Crypto++ 库没有任何经验。在我的项目中,我需要将 Integer 类型转换为 int。这就是我正在尝试的: int low_bound1=8; int low_bound2=9; Int
我是一名优秀的程序员,十分优秀!