4

私は数日間WindowsPCでQCA(リンク)を使おうとしていますが、Linuxボックスでは正常に動作しますが、Windowsでは動作しません。

だから私はQCAをインストールするためのすべての指示に従い、次にQCA用のosslプラグインに従いました。QCAは正常に機能しますが、何らかの理由でプラグインがQt Creatorに表示されず、プラグインの一部の機能を使用できません。

QCAに付属のqcatool2.exeを使用して、プラグインをチェックしました。

qcatool2 plugins --debug

次のエラーメッセージが表示されます。

plugin: qca-ossl2.dll: failed to load: The plugin 'C:/Qt/2010.05/qt/plugins/crypto/qca-ossl2.dll' uses incompatible Qt library. Expected build key "Windows mingw debug full-config", got "Windows mingw release full-config"

これは、qtがプラグインをデバッグモードでコンパイルする必要があるように見えるので(ビルドキーにリリースではなくデバッグを含めるため)、追加しました

CONFIG += debug

プラグインのプロジェクトファイルに移動し、通常どおりqmakeとmingw32-makeを実行しましたが、これは効果がなかったようです。

プラグインのプロジェクトファイルは次のようになりました。

TEMPLATE = lib
CONFIG += plugin
QT -= gui
DESTDIR = lib

VERSION = 2.0.0

unix:include(conf.pri)
windows:CONFIG += crypto
windows:include(conf_win.pri)

CONFIG += create_prl

SOURCES = qca-ossl.cpp

windows:{
load(winlocal.prf)
isEmpty(WINLOCAL_PREFIX) {
error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
}

OPENSSL_PREFIX = $$WINLOCAL_PREFIX
DEFINES += OSSL_097

INCLUDEPATH += $$OPENSSL_PREFIX/include
LIBS += -L$$OPENSSL_PREFIX/lib
LIBS += -llibeay32 -lssleay32
LIBS += -lgdi32 -lwsock32
}

!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
mac:TARGET = $$member(TARGET, 0)_debug
windows:TARGET = $$member(TARGET, 0)d
}
}

CONFIG += debug

誰かアイデアはありますか?これ以上詳細が必要な場合は、質問してください。可能な限り徹底するように努めました。ありがとう

トム

4

2 に答える 2

5

私は同様の状況に苦しんでいます。qca-osslはLinuxで正常にビルドされ、Windowsではまったくビルドされません。私はちょうどあなたにも役立つかもしれないブレークスルーを打ちました。

バージョンとパッチ

  • qtsdk-2010.05
  • qca-2.0.3
  • qca-ossl-r1190163(リポジトリから)
  • openssl-1.0.0b

まず、OpenSslの新しいバージョン(0.9.7+、私は思う)を使用している場合、いくつかの非互換性にパッチを適用するため、リポジトリのqca-osslバージョンを使用する必要があるかもしれません。また、ビルドエラーを回避するために、SHA224、SHA256、SHA384、およびSHA512を処理する新しいqca-ossl.cppファイルのいくつかの行をコメントアウトする必要がありました。私は暗号にqca-osslを使用しているので、ハッシュについては心配せず、エラーについてはあまり調査しませんでした。

それを修正する

Windowsビルドの問題は私にとって多くの問題でしたが、それらのほとんどは、Windowsバージョンのプラグインの見苦しいビルド設定に起因しています。Linux側の設定スクリプトが少しあるのはいいことですが、Windowsについてはどうでしょうか。少し余分な作業をする必要があります。

この余分な作業の一部は、アプリケーションのサポートライブラリに非標準の場所を選択したためです。QcaとOpenSslはどちらも、libraries/ディレクトリ内のプロジェクトのディレクトリ構造内に存在します。私の推測では、アプリケーションをクロスコンパイルしようとしている場合は同様のことを行っていると思いますが、そうでない場合でも、次のことが役立つはずです。

OpenSslの検索

Qca-osslは、接続するはずのライブラリが見つからない場合、うまくビルドできません... :)それでは、どこにあるかを直接指定しましょう。winlocal.prfに関連する行と、それに起因する変更をqca-ossl.proにコメントアウトします。openSslの場所を直接指定します。

TEMPLATE = lib
CONFIG += plugin
QT -= gui
DESTDIR = lib

VERSION = 2.0.0

unix:include(conf.pri)
windows:CONFIG += crypto
windows:include(conf_win.pri)

CONFIG += create_prl

SOURCES = qca-ossl.cpp

windows:{
# Rather than rely on the winlocal.prf file, we will specify the location of the openssl
# by hand when running qmake.
#
# load(winlocal.prf)
# isEmpty(WINLOCAL_PREFIX) {
# error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
# }
#
# OPENSSL_PREFIX = $$WINLOCAL_PREFIX
DEFINES += OSSL_097

INCLUDEPATH += $$OPENSSL_PREFIX/include
LIBS += -L$$OPENSSL_PREFIX/lib
LIBS += -llibeay32 -lssleay32
LIBS += -lgdi32 -lwsock32
}

!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
mac:TARGET = $$member(TARGET, 0)_debug
windows:TARGET = $$member(TARGET, 0)d
}
}

これで、.proファイルの$$OPENSSL_PREFIX環境変数に直接アクセスできます。次のようにして、qmakeを呼び出すときに設定できます。

qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b"

円記号または円記号を使用できる必要があります。ここでは、Qtが4.7以降非推奨になっているため、フォワードを選択します。

または、OPENSSL_PREFIX変数を.proファイルに直接設定することもできます。

Qcaを見つける

qca-osslのunixとwindowsのmakefileを比較した後、奇妙なことに、ビルドまたはリンク用のqcaライブラリが含まれることはありません。?!?!これにより、qca-ossl.cppの最後にあるopensslPluginクラス定義のQ_INTERFACES(QCAPlugin)行で「Undefinedinterface」エラーが発生しました。

これを回避するには、インクルードパスとライブラリパスを手動で明示的に定義する必要があります。最後のセクションのqmake行を拡張すると、最終的なqmake行は次のようになります。

qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b" "INCLUDEPATH+=C:/path/to/qca-2.0.3/include/QtCrypto" "LIBS+=-LC:/path/to/qca-2.0.3/lib -lqca2"

Qca-osslの「インストール」

上記のqmake行を実行し、プレーンなol'makeを実行した後、Qca-osslをインストールする必要があります。結果のdllをlib/ディレクトリからQtのプラグインディレクトリにコピーできます。私のバージョンを使用している場合、デフォルトはC:\ Qt \ 2010.05 \ qt \ plugins\cryptoです。または、C:\ path \ to \ my \ project\cryptoなどのプロジェクトのディレクトリ構造のルートレベルにある暗号ディレクトリに移動することもできます。

これがお役に立てば幸いです。

于 2011-02-24T16:18:45.040 に答える
0

実際には、このチュートリアルQCA + OpenSSLonWindowを試すことができます。それはうまくいきます。

ちなみに、ウィンドウ上のAES256でQCAを利用できます。しかし、Symbianでは使用できません。それをするためのアイデアはありますか?

関連記事

于 2011-11-02T02:58:27.097 に答える