2

VC++ 2008 で Axis2C と OpenSSL を使用して、https Web サービスにアクセスしています。実際の通信が行われているときはいつでも、ランタイムの致命的な例外が発生します。

OPENSSL_UPLINK: OPENSSL_APPLINK なし。

applink.c ファイル内のアプリケーションへのリンクなど、すべきことがいくつかあると読みました。私はそれを (extern "C" を使用して) 実行し、CRYPTO_malloc_init も呼び出します。どちらも効果がありません.. ここでちょっと迷っています。

他に何をチェックすればよいですか?また、なぜ axis2c が axis.log ファイルに書き込むことがあるのか​​、しないのかを知っている人はいますか?

ありがとう!

ロイ。

4

3 に答える 3

3

OpenSSL 1.0.1e(http://slproweb.com/products/Win32OpenSSL.htmlからWin32用にプリコンパイルされています)を使用して、同様の問題が発生しました。

根本的な原因はわかりませんが、DLLライブラリの代わりにVCの静的ライブラリを使用してアプリケーションを再構築すると、問題は解決しました。

言い換えれば、このライブラリは私にとって失敗しました:

C:\OpenSSL-Win32\lib\libeay32.lib

しかし、このライブラリを再度リンクすることは成功しました

C:\OpenSSL-Win32\lib\VC\static\libeay32MD.lib

私の知る限り、他のライブラリ( http://forums.epo.org/installation-and-maintenance/topic1373.htmlを参照)との非互換性に関連している可能性があります。私のアプリケーションでは、libeay32ライブラリのみを使用していました。

さらに、それはPEMの処理と関係がありました。RSAキーを生成することはできましたが、静的ではなくDLLに対してリンクした場合、それを書き込むことができませんでした。

于 2013-03-12T21:56:53.890 に答える
2

これは、コンパイル フラグが原因である可能性があります。ここでは、Windows で Axis2c + OpenSSL 64 ビットをコンパイルする方法について説明します。

OpenSSL を使用して Axis2c 64 ビットを作成する

バージョン:

  • Axis2c 1.6.0
  • OpenSSL 1.0.0d

前提条件:

  • Perl 5 (64 ビット版)

Perl は %PATH% システム環境変数にある必要があります

OpenSSL

OpenSSL を構成してコンパイルします。

cd <openssl_root_dir> (e.g. C:\tmp\openssl-1.0.0b)
perl Configure VC-WIN64A
ms\do_win64a
nmake -f ms\ntdll.mak
cd out32dll
..\ms\test

Axis2c makefile に追加の変更が加えられないようにするには、ファイルを次のディレクトリ構造にコピーします。

<openssl_root_dir>/bin (libeay32.dll, ssleay32.dll)
<openssl_root_dir>/lib  libeay32.lib, ssleay32.lib)
<openssl_root_dir>/include/openssl (all *.h, *.c files)

Axis2c

Axis2C を構成する

\build\win32\configure.in で次の設定を変更します。

ENABLE_SSL = 1 OPENSSL_BIN_DIR =
<openssl_root_dir> (e.g.
C:\tmp\openssl-1.0.0b) CRUNTIME = /MD
EMBED_MANIFEST = 1

\build\win32\makefile で次の設定を変更します。

LDFLAGS = $(LDFLAGS) /LIBPATH:$(OPENSSL_BIN_DIR)\lib
LIBS = $(LIBS) libeay32.lib ssleay32.lib

Axis2C をコンパイルします cd \build\win32 nmake install

すべての必要なファイルは次のフォルダにあります: \build\deploy

2 つの OpenSSL dll ファイル (libeay32.dll、ssleay32.dll) は、手動で deploy\lib サブ フォルダーにコピーされる場合があります。

于 2011-02-16T08:28:44.137 に答える
1

openssl faqによると:

0.9.8 に従って、上記の制限は .DLL に対して排除されます。特定のランタイム オプション [デフォルトの /MD を使用する] でコンパイルされた OpenSSL .DLL は、別のオプションまたは別のコンパイラでコンパイルされたアプリケーションで展開できます。しかし、落とし穴があります!以前のバージョンで必要だった OpenSSL ツールキットを再コンパイルする代わりに、選択したコンパイラやオプションを使用して小さな C スニペットをコンパイルする必要があります。スニペットは /include/openssl/applink.c としてインストールされ、アプリケーション プロジェクトに追加するか、アプリケーション ソース ファイルの 1 つだけに #include-d する必要があります。この shim モジュールをアプリケーションにリンクしないと、致命的な "no OPENSSL_Applink" ランタイム エラーとして現れます。

プロジェクトに applink.c をインクルードして楽しんでください!

于 2014-03-16T11:02:10.763 に答える