首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有OpenSSL的Axis2C -无OPENSSL_APPLINK错误

带有OpenSSL的Axis2C -无OPENSSL_APPLINK错误
EN

Stack Overflow用户
提问于 2010-12-14 19:02:20
回答 3查看 5.1K关注 0票数 2

我正在使用VC++ 2008中的Axis2C和OpenSSL来访问https with服务。每当发生实际的通信时,我都会得到一个运行时致命异常:

OPENSSL_UPLINK:没有OPENSSL_APPLINK。

我读到有几件事你应该做,比如在applink.c文件中链接到我的应用程序。我这样做了(使用外部"C"),并且我还调用了CRYPTO_malloc_init。他们两个都是无效的。我有点迷路了。

我还应该检查什么?另外,有人知道为什么axis2c有时写入axis.log文件,有时不写入吗?

谢谢!

罗伊。

EN

回答 3

Stack Overflow用户

发布于 2013-03-13 05:56:54

我也遇到过类似的问题,使用OpenSSL 1.0.1e (从http://slproweb.com/products/Win32OpenSSL.html为Win32预编译)。

我不确定根本原因是什么,但当我使用VC的静态库而不是DLL库重新构建我的应用程序时,这个问题就消失了。

换句话说,这个库对我来说失败了:

代码语言:javascript
复制
C:\OpenSSL-Win32\lib\libeay32.lib

但再次链接此库成功

代码语言:javascript
复制
C:\OpenSSL-Win32\lib\VC\static\libeay32MD.lib

这可能与与其他库(请参阅http://forums.epo.org/installation-and-maintenance/topic1373.html)不兼容有关。据我所知,我的应用程序只使用了libeay32库。

此外,它还与PEM处理有关。我能够生成RSA密钥,但当我链接到DLL而不是静态链接时,我无法编写它。

票数 3
EN

Stack Overflow用户

发布于 2011-02-16 16:28:44

这可能是由于编译标志造成的。以下是如何在Windows64位上编译Axis2c + OpenSSL的说明。

使用OpenSSL创建64位Axis2c

版本:

  • Axis2c 1.6.0
  • OpenSSL 1.0.0d

前提条件:

  • Perl 5 (64位版本)

Perl应在%PATH%系统环境变量中

OpenSSL

配置并编译OpenSSL:

代码语言:javascript
复制
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生成文件中进行其他更改,请将文件复制到以下目录结构:

代码语言:javascript
复制
<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中更改以下设置:

代码语言:javascript
复制
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中的以下设置:

代码语言:javascript
复制
LDFLAGS = $(LDFLAGS) /LIBPATH:$(OPENSSL_BIN_DIR)\lib
LIBS = $(LIBS) libeay32.lib ssleay32.lib

编译Axis2C cd \build\win32 nmake install

所有必需文件都位于文件夹:\build\deploy

可以手动将两个deploy dll文件(libeay32.dll、ssleay32.dll)复制到OpenSSL \lib子文件夹中。

票数 2
EN

Stack Overflow用户

发布于 2014-03-16 19:02:11

根据openssl faq的说法

根据0.9.8版本的

,.DLLs消除了上述限制。使用某些特定的运行时选项编译的OpenSSL .DLLs,我们坚持默认的/MD可以部署到使用不同选项甚至不同编译器编译的应用程序中。但是有一个问题!您不必像以前的版本那样重新编译OpenSSL工具包,而是必须使用您选择的编译器和/或选项来编译小的C代码片段。代码片段安装为/include/openssl/applink.c,应该添加到您的应用程序项目中,或者只需在一个应用程序源文件中使用#include-d即可。如果未能将此填充模块链接到应用程序中,则会显示为致命的"no OPENSSL_Applink“运行时错误。一个明确的提醒是,在这种情况下,混合编译器选项,在第一次调用OpenSSL之前添加CRYPTO_malloc_init同样重要。

因此,只需在您的项目中包含applink.c即可&享受吧!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4438450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档