1

Ich verwende Axis2C mit OpenSSL in VC++ 2008, um auf einen https Webservice zuzugreifen. Immer wenn die eigentliche Kommunikation stattfindet, erhalte ich eine Laufzeitfehlermeldung:Axis2C mit OpenSSL - nein OPENSSL_APPLINK Fehler

OPENSSL_UPLINK: nein OPENSSL_APPLINK.

Ich lese, dass es mehrere Dinge, die Sie tun sollten, wie zum Beispiel Link in der applink.c-Datei zu meiner Anwendung. Ich tat das (mit externem "C"), und ich rufe auch CRYPTO_malloc_init auf. Beide sind wirkungslos. Ich bin hier irgendwie verloren.

Was sollte ich noch überprüfen? weiß jemand auch, warum axis2c manchmal in die axis.log-datei schreibt und manchmal nicht?

Danke!

Roey.

Antwort

2

Dies könnte an den Kompilierflags liegen. Hier ist die Beschreibung, wie Sie Axis2c + OpenSSL 64 Bit unter Windows kompilieren können.

erstellen Axis2c 64 Bit mit OpenSSL

Versionen:

  • Axis2c 1.6.0
  • OpenSSL 1.0.0d

Voraussetzungen:

  • Perl 5 (64-Bit-Version)

Perl in% PATH% Systemumgebung sollte variable

OpenSSL

konfigurieren und kompilieren 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 

Zur Verhinderung Wenn Sie weitere Änderungen im Axis2c-Makefile vornehmen, kopieren Sie die Dateien in die folgende Verzeichnisstruktur:

<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

konfigurieren Axis2C

Ändern Sie die folgenden Einstellungen in \ build \ win32 \ konfigurieren.in:

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

Ändern Sie die folgenden Einstellungen in \ \ win32 \ Make-Datei zu bauen:

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

Compile Axis2C cd \ win32 \ build Nmake

Alle encessary Dateien in den Ordner installieren : \ build \ deploy

Die 2 OpenSSL-DLL-Dateien (libeay32.dll, ssleay32.dll) können c sein wurde dem Unterordner deploy \ lib manuell hinzugefügt.

3

Ich hatte ein ähnliches Problem, mit OpenSSL 1.0.1e (vorkompiliert für Win32 von http://slproweb.com/products/Win32OpenSSL.html).

Ich bin mir nicht sicher, was die Ursache war, aber das Problem ging weg, wenn ich meine Anwendung mithilfe der statischen Bibliotheken für VC, anstelle der DLL-Bibliotheken neu erstellt.

Mit anderen Worten, diese Bibliothek hier für mich im Stich gelassen:

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

Aber die Verknüpfung wieder diese Bibliothek

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

Es ist möglicherweise im Zusammenhang mit Inkompatibilitäten mit anderen Bibliotheken (siehe http://forums.epo.org/installation-and-maintenance/topic1373.html) bis Ich konnte sagen, meine Anwendung verwendete nur die Libeay32-Bibliothek.

Außerdem hatte es mit der PEM-Handhabung zu tun. Ich konnte einen RSA-Schlüssel generieren, aber ich konnte es nicht schreiben, wenn ich gegen die DLL statt statisch verlinkte.

+0

+1 für "PEM-Handhabung". Das hat mich zu der Erkenntnis gebracht, dass ich auf eine nicht vorhandene Cert-Datei deutete, die den Fehler verschwinden ließ! –

0

Nach openssl faq:

Gemäß 0.9.8 die oben genannte Beschränkung für .DLLs beseitigt wird. OpenSSL .DLLs kompiliert mit einer bestimmten Laufzeitoption [wir bestehen auf der Standard/MD] kann mit Anwendung kompiliert mit anderen Option oder sogar anderen Compiler bereitgestellt werden. Aber es gibt einen Haken! Anstatt OpenSSL-Toolkit neu kompilieren, wie Sie mit früheren Versionen müssen, müssen Sie kleine C-Snippet mit Compiler und/oder Optionen Ihrer Wahl kompilieren. Das Snippet wird als /include/openssl/applink.c installiert und sollte entweder zu Ihrem Anwendungsprojekt hinzugefügt werden oder einfach # include-d in einem [und nur einem] von Ihre Anwendungsquelldateien. Wenn Sie dieses Shim-Modul nicht mit verknüpfen, wird Ihre Anwendung als fataler "no OPENSSL_Applink" Laufzeitfehler angezeigt. Eine ausdrückliche Erinnerung ist, dass in dieser Situation [Mixing Compiler-Optionen] ist es wichtig, CRYPTO_malloc_init vor dem ersten Aufruf an OpenSSL hinzuzufügen.

Also einfach applink.c in Ihr Projekt einbinden & genießen!