我正在尝试使用Botan加密库运行最基本的程序。我正在使用Botan 1.10 32位。我在Windows 7上通过安装程序获得了二进制文件。IDE是Visual Studio 2012。

我将项目链接到botan.lib,但是程序在启动时报告缺少一个botan.dll,因此我认为该lib仅链接到dll。因此,我已将botan.dll放入Debug文件夹中。

现在解决问题。

#include <iostream>

#include <botan/botan.h>
using namespace Botan;
using namespace std;

int main(int argc, char* argv[]) {
    try {
        cout << "d1";
        LibraryInitializer init;  //exception thrown here
    }
    catch(exception& e) {
        cout << "Exception caught: " << e.what() << std::endl;
    }
    cout << "d2";
    return 0;
}

Intellisense可以检测到一切正常。当我尝试调试时,我得到:



似乎在botan.dll中引发了异常,我无法捕获它。我不能再从这里走了。

链接到库时我做错了什么吗?还是有其他问题?帮助表示赞赏。

最佳答案

扩展我的评论:

如果即使使用发行版的程序您的程序也崩溃,则必须下载源代码并自己进行构建(配置该版本需要python)。

如果发行版本没有崩溃,则可以在/RTCs Stack Frames项目设置中为调试版本禁用C++/Code Generation运行时检查,这似乎是导致崩溃的原因。只需将设置从Both更改为/RTCu Uninitialized Variables或通过将其设置为Default完全禁用它。

由于这是一种解决方法,而不是解决方案,因此您应该考虑自己构建botan并同时构建发行版和调试版(然后您可以链接到
您的调试版本,并保持调试运行时检查不变。

请引用documentation上的构建方法(您需要python来运行配置):

构建发行版本(默认)后,请将以下文件复制到另一个目录(例如C:\Botan\release\),否则在构建调试版本时它们将被覆盖:

  • botan.dll
  • botan.exp
  • botan.lib
  • botan.dll.manifest

  • 现在再次运行configure,这次添加--enable-debug选项:
    > python configure.py --cc=msvc --enable-debug
    

    并再次构建它。这次,将文件(上面列出的)复制到C:\Botan\debug\

    将项目配置为链接到调试目录中的调试库(用于调试版本)和发布目录中的库(用于发布版本)。
    最后,请确保您的程序在运行时加载适当的DLL。

    关于c++ - botan.dll中未处理的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13964404/

    10-11 00:55