2010-12-14 61 views
1

我在VC++ 2008中使用Axis2C和OpenSSL來訪問https web服務。 無論何時發生實際通信,我都會遇到運行時致命異常:Axis2C with OpenSSL - no OPENSSL_APPLINK error

OPENSSL_UPLINK:no OPENSSL_APPLINK。

我讀過,你應該做幾件事情,比如將applink.c文件鏈接到我的應用程序。我做到了,(使用extern「C」),我也叫CRYPTO_malloc_init。他們兩個都是無效的。我有點迷失在這裏。

我還應該檢查什麼?另外,是否有人知道爲什麼axis2c有時寫入axis.log文件,有時不會?

謝謝!

Roey。

回答

2

這可能是由於編譯標誌。 下面是如何在Windows上編譯Axis2c + OpenSSL 64位的說明。

使用OpenSSL創建64 AXIS2C位

版本:

  • 1.6.0 AXIS2C
  • 的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中的其他更改,將文件複製到以下dir結構:

<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 \配置以下設置。在:

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

變化\編譯\ WIN32 \ makefile文件進行如下設置:

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

編譯Axis2C的 CD \編譯\ win32的 NMAKE安裝

所有encessary文件到文件夾中: \ build \ deploy

2個OpenSSL dll文件(libeay32.dll,ssleay32.dll)可能是c手動選擇部署\ lib子文件夾。

3

我有一個類似的問題,使用OpenSSL 1.0.1e(從http://slproweb.com/products/Win32OpenSSL.html預編譯爲Win32)。

我不知道根本原因是什麼,但問題走了,當我使用靜態庫的VC重建我的應用程序,而不是DLL庫。

換句話說,該庫在這裏失敗對我來說:

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而不是靜態。

+0

+1「PEM handling」。這讓我意識到,我指着一個不存在的證書文件,這使得錯誤消失了! – 2015-07-31 04:15:38

0

根據openssl faq

按照0.9.8上述限制被消除了的.DLL。與一些特定的運行時間選項[我們堅持 默認/ MD]編譯OpenSSL的 .DLL文件可以應用不同 選項,甚至不同的編譯器編譯部署。但是有一個問題!取而代之的 重新編譯OpenSSL工具箱,因爲你必須事先 版本中,你必須編譯編譯器和/或您所選擇的選項 小C段。該片段被安裝爲 /include/openssl/applink.c,應要麼加入 您的應用程序項目或只是#包括-d的 您的應用程序源文件在一個[只有一個。如果未將此墊片模塊鏈接到 ,則您的應用程序將自身顯示爲致命的「no OPENSSL_Applink」 運行時錯誤。明確提醒的是,在這種情況下 [混合編譯器選項],在首次調用OpenSSL之前添加CRYPTO_malloc_init 同樣重要。

所以只需在您的項目中加入applink.c &享受!