与Qt使用Botan时遇到问题

与Qt使用Botan时遇到问题

问题描述:

我正在使用Qt,我正尝试使用Botan。一切似乎顺利,但是当我去:与Qt使用Botan时遇到问题

Botan::BigInt myInt;

在我的构造函数,它工作正常,但另一方面,如果我去:

Botan::AutoSeeded_RNG rng;

它抛出未定义的错误:

C:\Users\Stevie\Desktop\asfsdf-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\debug\mainwindow.o:-1: In function `AutoSeeded_RNG': 
C:\Users\Stevie\Desktop\asfsdf-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\..\..\..\..\botan\include\botan\auto_rng.h:40: error: undefined reference to `_imp___ZN5Botan23Global_State_Management12global_stateEv' 
C:\Users\Stevie\Desktop\asfsdf-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\..\..\..\..\botan\include\botan\auto_rng.h:40: error: undefined reference to `_imp___ZN5Botan13Library_State10global_rngEv' 
:-1: error: collect2: ld returned 1 exit status 

我不知道为什么它会以一个BIGINT但不是AutoSeeded_RNG工作,但这里是我的具体步骤:

  1. 在 “SRC /库/的3rdParty /牡丹/” 编译包括在Qt Creator的源牡丹源

  2. 我使用Windows安装(1.10)从their website安装牡丹。

  3. 我把libBotan.a,libBotand.a,botan.dll和Botand.dll放到了我安装Botan(C:\ botan)的位置。我覆盖了那些已经存在的文件。

  4. 我然后创建了一个新Qt工程,和pro文件的内部我添加下列行:

    INCLUDEPATH + = “C:/牡丹/包括”
    LIBS + =“C :/botan/libBotan.a”

  5. 接下来,我进入我的 “mainwindow.cpp”,并添加:

    #include <botan/botan.h>

    成功编译成功。

  6. 我现在还要补充到我的构造函数:

    Botan::AutoSeeded_RNG rng;

现在上面的错误抛出,而不能跑了。如果我将“AutoSeeded_RNG”替换为“BigInt”,那么它编译完美。

感谢您的帮助,Hetelek。

链接反对Botan库的声明对我来说看起来很陌生。通常情况下,你使用-L开关指定库目录,并与-l开关添加库,即你应该使用

LIBS += -L"C:\botan" -lBotan 

注意,库的前缀和后缀不是在lbotan规定。链接器将根据您的环境自动查找libbotan.abotan.dll

Botan也是QtCreator的一部分。也许你应该看看their repository。你可以在那里找到.pri.pro文件,可能只需要复制它们。他们还为新的Qt编译系统编写了一个.qbs驱动程序。

编辑:我刚刚编译了QtCreator源代码中的Botan,就像您在文章中提到的那样。然后我将所有生成的库复制到我自己的目录中,并且还使用了与QtCreator一起发货的botan.h。在Linux上,我必须添加

LIBS += -L"/dir/into/which/i/copied/botan/dlls" -LBotan -ldl 

到qmake .pro文件。注意额外的-ldl,否则我得到了未定义的参考dlym,dlerror等我可以编写一个简单的例子Botan::AutoSeeded_RNG没有问题。

+0

更改我的LIBS定义方式并没有帮助:( – hetelek 2012-08-17 15:08:13

+0

)当您添加BigInt时,您是否也使用它?例如,尝试添加两个BigInt,否则编译器可能会优化它。我也很好奇,如果你用Botan和你的程序使用相同的编译器。 – Mehrwolf 2012-08-17 16:34:42

+0

是的,我确实使用它并且没有问题。 – hetelek 2012-08-17 20:15:04