0

私は 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

AutoSeeded_RNGではなくBigIntで機能する理由はわかりませんが、正確な手順は次のとおりです。

  1. 「src/libs/3rdparty/botan/」にある Qt Creator ソースに含まれる Botan ソースをコンパイルしました。

  2. Web サイトから Windows インストーラー (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。

4

1 に答える 1

4

Botan ライブラリにリンクするステートメントは、私には奇妙に見えます。通常、スイッチを使用してライブラリ ディレクトリを指定し、-Lスイッチを使用してライブラリを追加し-lます。

LIBS += -L"C:\botan" -lBotan

ライブラリのプレフィックスとサフィックスは で指定されていないことに注意してくださいlbotan。環境に応じて、リンカは自動的にlibbotan.aまたはを探します。botan.dll

Botan は QtCreator の一部でもあります。たぶん、彼らのリポジトリを見てください。.priそこにあるファイルを見つけることができ.pro、おそらくそれらをコピーするだけで済みます。また.qbs、新しい Qt ビルド システム用のドライバーも作成しました。

編集:あなたの投稿でも述べたように、QtCreator ソースから Botan をコンパイルしました。次に、生成されたすべてのライブラリを自分のディレクトリにコピーし、botan.hQtCreator に同梱されている も使用しました。Linuxでは、追加する必要がありました

LIBS += -L"/dir/into/which/i/copied/botan/dlls" -LBotan -ldl

qmake.proファイルに。そうしないと、などへの-ldl未定義の参照が追加されていることに注意してください。簡単な例を問題なくコンパイルできました。dlymdlerrorBotan::AutoSeeded_RNG

于 2012-08-17T08:37:46.427 に答える