麻烦使用Botan与Qt

时间:2012-08-16 20:14:55

标签: c++ 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 / libs / 3rdparty / botan /”

  2. 编译了Qt Creator源中包含的Botan源代码
  3. 我使用their website中的Windows Installer(1.10)安装了Botan。

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

  5. 然后我创建了一个新的Qt项目,并在.pro文件中添加了以下行:

      

    INCLUDEPATH + =“C:/ botan / include”
      LIBS + =“C:/botan/libBotan.a”

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

    #include <botan/botan.h>

    所有内容都成功汇总到此处。

  7. 我现在将它添加到我的构造函数中:

    Botan::AutoSeeded_RNG rng;

  8. 现在抛出上述错误,无法运行。如果我用“BigInt”替换“AutoSeeded_RNG”,那么它将完美编译。

    感谢任何帮助,Hetelek。

1 个答案:

答案 0 :(得分:4)

与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,否则我会得到dlymdlerror等未定义的引用。我可以编译一个带Botan::AutoSeeded_RNG的简单示例而没有问题。