我正在使用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一起工作,但以下是我的具体步骤:
#include <botan/botan.h>
所有东西都编译成功了。Botan::AutoSeeded_RNG rng;现在,上面的错误被抛出,无法运行。如果我将"AutoSeeded_RNG“替换为"BigInt",那么它编译得非常完美。
谢谢你的帮助,海泰克。
发布于 2012-08-17 08:37:46
在我看来,链接到Botan图书馆的声明看起来很奇怪。通常,您使用-L开关指定库目录,并使用-l开关添加一个库,即您应该使用
LIBS += -L"C:\botan" -lBotan注意,在lbotan中没有指定库的前缀和后缀。链接器将根据您的环境自动查找libbotan.a或botan.dll。
Botan也是QtCreator的一部分。也许你应该看看储存库。您可以在那里找到.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编译一个简单的示例,没有问题。
https://stackoverflow.com/questions/11994803
复制相似问题