2010-12-14 12 views
1

VC++ 2008でOpenSSLでAxis2Cを使用してhttpsウェブサービスにアクセスしています。 実際の通信が行われるたびに、実行時に致命的な例外が発生します。OpenSSLを使用したAxis2C - OPENSSL_APPLINKエラーなし

OPENSSL_UPLINK:OPENSSL_UPPLINKはありません。

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

他に何を確認する必要がありますか?また、axis2cがaxis.logファイルに書き込むことがあるのは誰でも知っていますか?

ありがとうございます!

Roey。

答えて

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メイクファイルの変更を追加するには、ファイルを次のディレクトリ構造にコピーします。

<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

変更\ビルド\のwin32 \ののconfigureで以下の設定。中:

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

変更\ビルド\のwin32 \メイクファイルで以下の設定:

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

コンパイルAxis2C CDの\ビルドの\ win32の

にすべてencessaryファイルをインストールnmakeビルドガイドフォルダにあります: \ build \ deploy

OpenSSLの2つのdllファイル(libeay32.dll、ssleay32.dll)は、c deploy \ libサブフォルダに手動でコピーします。

3

私は(http://slproweb.com/products/Win32OpenSSL.htmlからのWin32用にコンパイル済み)のOpenSSL 1.0.1eを使用して、同様の問題がありました。

私は根本的な原因が何であったかわからないんだけど、私はVCのための静的ライブラリを使用して自分のアプリケーションを再構築するときに問題はなく、DLLライブラリの、去っていきました。言い換えれば

が、ここでこのライブラリは私のために失敗しました:

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

しかし、再び、このライブラリをリンクするには、限り(http://forums.epo.org/installation-and-maintenance/topic1373.htmlを参照)これは、他のライブラリとの非互換性の可能性に関連するのです

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

を成功しました私のアプリケーションはlibeay32ライブラリしか使用していないことが分かりました。

また、PEMの取り扱いとしなければなりませんでした。私はRSAキーを生成することができましたが、静的ではなくDLLにリンクしたときに書き込むことができませんでした。 openssl faqによれば

+0

+1 "PEM処理"です。それは、私が存在しない証明書ファイルを指していることに気付きました。これにより、エラーが解消されました! –

0

上記制限は.DLLファイルのために排除さ0.9.8あたりのように。いくつかの特定の実行時オプションを指定してコンパイルOpenSSLの の.DLL [我々は デフォルト/ MDを主張]は異なる オプション、あるいは異なるコンパイラでコンパイルされたアプリケーションを展開することができます。しかし、キャッチがあります!代わりの 再コンパイルする前に バージョンでは、あなたは、コンパイラおよび/またはお好みの オプションを持つ小さなCスニペットをコンパイルする必要があるとあなたが持っていると同じように、OpenSSLツールキットを。スニペットは /include/openssl/applink.cとしてインストールされると、どちらか アプリケーションプロジェクトに追加する必要がありますまたは単に# アプリケーションのソースファイルのいずれかで[つのみ]-Dが含まれます。このシムモジュールを にリンクさせないと、アプリケーションは致命的な "no OPENSSL_Applink" 実行時エラーとして現れます。明示的に通知するのは、この状況では [コンパイラオプションを混在させる]ので、CRYPTO_malloc_initを追加することが重要です。 先にOpenSSLを呼び出してください。

プロジェクトにapplink.cを含めてください。& enjoy!

関連する問題