首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::bad_alloc使用Botan实现PKCS#11

std::bad_alloc使用Botan实现PKCS#11
EN

Stack Overflow用户
提问于 2019-08-14 12:44:52
回答 1查看 504关注 0票数 2

我是C++的新手,我真的坚持使用Botan连接到硬件加密令牌。我不知道我是不是错过了小牛或小鸭子的装备。

我建立了基于在Windows 10环境下构建Botan库的Botan库。botan.libbotan.dll是在构建后在lib文件夹中创建的。

然后使用以下简单代码在VisualStudio2019中创建一个consoleApplication:

代码语言:javascript
复制
#include <iostream>
#include <botan/botan.h>

#include <botan/p11.h>
#include <botan/p11_slot.h>
#include <botan/p11_session.h>
#include <botan/p11_module.h>
#include <botan/p11_object.h>
#include <botan/p11_randomgenerator.h>

#include <botan/p11_x509.h>
#include <botan/x509_dn.h>

using namespace Botan; 
using namespace PKCS11;

int main()
{
    Botan::PKCS11::Module module("C:\\Windows\\System32\\ShuttleCsp11_3003.dll");
    // Sometimes useful if a newly connected token is not detected by the PKCS#11 module
    module.reload();

    Botan::PKCS11::Info info = module.get_info();

    // print library version
    std::cout << std::to_string(info.libraryVersion.major) << "."
        << std::to_string(info.libraryVersion.minor) << std::endl;
}

这是我准备运行的设置:

配置Properties→VC++目录:

  1. 包含目录→添加C:\Botan\ Include \botan-2;
  2. 可执行目录→添加C:\Botan\bin;
  3. 图书馆目录→添加C:\Botan\lib;
  4. 源目录→添加C:\Botan\src;
  5. 附加包含库→添加C:\Botan\ Include \botan-2

链接器

  1. 附加图书馆目录→添加C:\Botan\lib;
  2. 输入C:\Botan\lib\botan.lib附加依赖项→添加→

另外,我还安装了System32文件夹中的dll令牌驱动程序;

当我用x86构建时,我用这个配置调试了这个项目:

我需要你帮忙解决的错误是:

代码语言:javascript
复制
Unhandled exception at 0x74CD2CF2 in ConsoleApplication1.exe: Microsoft C++ exception:
std::bad_alloc at memory location 0x004FF1AC.

此错误发生在这一行代码中:

代码语言:javascript
复制
Botan::PKCS11::Module module("C:\\Windows\\System32\\ShuttleCsp11_3003.dll");

这是调用堆栈

注意,我在调试文件夹中复制了botan.dll和ShuttleCsp11_3003.dll。

谁来帮帮忙,谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 16:35:44

使用Vcpkg,这是微软创建的一个工具,帮助获取和构建开源C和C++库,它使用一个线性shell命令行自动安装botan,并集成到VS 2019项目中。

从GitHub安装vcpkg之后,从PowerShell提示符中键入以下命令以下载和安装库,包括所有依赖项:

代码语言:javascript
复制
.\vcpkg install botan:x86-windows

使用它自动(或者您可以手动完成)将库集成到VS项目中。

代码语言:javascript
复制
.\vcpkg integrate install

这是严重的错误,这就是为什么您的项目不能识别名称空间和包含文件,包含目录→添加C:\botan\→\botan-2是不正确的检查目录/文件名botan-2,它不应该存在。

  • 应该是C:\ botan \include;因为您的程序在文件夹路径中包括botan(例如#include "botan/botan.h")

将dll文件复制到项目目录(用于调试测试)和应用程序文件夹(调试或发布版本),并在加载PKCS#11共享库时不要忘记更正dll文件夹路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57494986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档