Axis2C с OpenSSL - нет ошибки OPENSSL_APPLINK - PullRequest
1 голос
/ 14 декабря 2010

Я использую Axis2C с OpenSSL в VC ++ 2008 для доступа к веб-сервису https.Всякий раз, когда происходит фактическое общение, я получаю фатальное исключение во время выполнения:

OPENSSL_UPLINK: нет OPENSSL_APPLINK.

Я прочитал, что вам нужно сделать несколько вещей, например, ссылку в applink.cподать заявкуЯ сделал это (используя extern "C"), и я также вызываю CRYPTO_malloc_init.Они оба неэффективны ... Я тут немного потерялся.

Что еще мне следует проверять?Кроме того, кто-нибудь знает, почему axis2c иногда записывает в файл axis.log, а иногда нет?

Спасибо!

Рои.

Ответы [ 3 ]

3 голосов
/ 13 марта 2013

У меня была похожая проблема с использованием OpenSSL 1.0.1e (предварительно скомпилированного для Win32 из http://slproweb.com/products/Win32OpenSSL.html).

Я не уверен, что было основной причиной, но проблема исчезла, когда я перестроил свое приложение, используя статические библиотеки для 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 вместо статически.

2 голосов
/ 16 февраля 2011

Это может быть связано с флагами компиляции.Вот описание, как вы можете скомпилировать Axis2c + OpenSSL 64 Bit в Windows.

Создать Axis2c 64 Bit с OpenSSL

Версии:

  • 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

Для предотвращения дополнительных изменений вmake-файл Axis2c, скопируйте файлы в следующую 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

Измените следующие настройки в \ 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 файла DLL OpenSSL (libeay32.dll, ssleay32.dll) могут быть скопированы вРазвернуть папку \ lib вручную.

0 голосов
/ 16 марта 2014

Согласно openssl faq :

Согласно 0.9.8 вышеуказанное ограничение устранено для .DLL. OpenSSL .DLLs скомпилированы с определенным параметром времени выполнения [мы настаиваем на default / MD] может быть развернуто с приложением, скомпилированным с другими вариант или даже другой компилятор. Но есть подвох! Вместо перекомпиляция инструментария OpenSSL, как вы должны сделать с предыдущим версии, вы должны скомпилировать небольшой фрагмент кода C с компилятором и / или варианты на ваш выбор. Фрагмент устанавливается как /include/openssl/applink.c и должен быть добавлен в проект вашего приложения или просто # include-d в одном [и только одном] из исходные файлы вашего приложения. Неспособность связать этот модуль прокладки в ваше приложение проявляется как фатальное "нет OPENSSL_Applink" ошибка выполнения. Явное напоминание связано с тем, что в этой ситуации [смешивание параметров компилятора] так же важно добавить CRYPTO_malloc_init до первого звонка в OpenSSL.

Так что просто включите applink.c в свой проект и наслаждайтесь!

...