2012-08-16 58 views
0

我正在使用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。

回答

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,否則我得到了未定義的參考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