与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工作,但这里是我的具体步骤:
在 “SRC /库/的3rdParty /牡丹/” 编译包括在Qt Creator的源牡丹源
我使用Windows安装(1.10)从their website安装牡丹。
我把libBotan.a,libBotand.a,botan.dll和Botand.dll放到了我安装Botan(C:\ botan)的位置。我覆盖了那些已经存在的文件。
-
我然后创建了一个新Qt工程,和pro文件的内部我添加下列行:
INCLUDEPATH + = “C:/牡丹/包括”
LIBS + =“C :/botan/libBotan.a” -
接下来,我进入我的 “mainwindow.cpp”,并添加:
#include <botan/botan.h>
成功编译成功。
-
我现在还要补充到我的构造函数:
Botan::AutoSeeded_RNG rng;
现在上面的错误抛出,而不能跑了。如果我将“AutoSeeded_RNG”替换为“BigInt”,那么它编译完美。
感谢您的帮助,Hetelek。
链接反对Botan库的声明对我来说看起来很陌生。通常情况下,你使用-L
开关指定库目录,并与-l
开关添加库,即你应该使用
LIBS += -L"C:\botan" -lBotan
注意,库的前缀和后缀不是在lbotan
规定。链接器将根据您的环境自动查找libbotan.a
或botan.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
没有问题。
更改我的LIBS定义方式并没有帮助:( – hetelek 2012-08-17 15:08:13
)当您添加BigInt时,您是否也使用它?例如,尝试添加两个BigInt,否则编译器可能会优化它。我也很好奇,如果你用Botan和你的程序使用相同的编译器。 – Mehrwolf 2012-08-17 16:34:42
是的,我确实使用它并且没有问题。 – hetelek 2012-08-17 20:15:04