【问题标题】:Trouble using Botan with Qt在 Qt 中使用 Botan 时遇到问题
【发布时间】:2012-08-16 20:14:54
【问题描述】:

我正在使用 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 而不是 AutoSeded_RNG,但这是我的确切步骤:

  1. 编译了包含在“src/libs/3rdparty/botan/”的 Qt Creator 源代码中的 Botan 源代码

  2. 我使用来自 their website 的 Windows Installer (1.10) 安装了 Botan。

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

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

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

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

    #include <botan/botan.h>

    一切都成功编译到这里。

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

    Botan::AutoSeeded_RNG rng;

现在上面的错误被抛出,并且无法运行。如果我将“AutoSeeded_RNG”替换为“BigInt”,那么它可以完美编译。

感谢您的帮助,Hetelek。

【问题讨论】:

    标签: c++ qt botan


    【解决方案1】:

    链接到 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 编译一个简单的示例而不会出现问题。

    【讨论】:

    • 不幸的是,改变我定义我的 LIBS 的方式并没有帮助:(
    • 你添加BigInt的时候,你也用了吗?例如,尝试添加两个BigInts 否则编译器可能只是优化它。我也很好奇,如果您对 Botan 和您的程序使用相同的编译器。
    • 是的,我确实使用过它,它很好。
    • 您可以尝试将 Botan 与 QtCreator 附带的标头一起使用吗?当 .cpp 来自 Creator 而 .h 来自他们的网站时,您可能会遇到问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2017-09-24
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多