Axis2无法加载DLL

时间:2015-11-14 08:35:11

标签: c axis2

我在Apache-Axis2日志文件中遇到了以下行。

[Sat Nov 14 12:16:08 2015] [error] ..\..\util\src\class_loader.c(167) Loading shared library ..//lib/axis2_http_sender.dll  Failed. DLERROR IS DLL Load Error 126: The specified module could not be found.

在分析第156行到第167行的class_loader.c文件时,如下所示:

dll_name = axutil_dll_desc_get_name(dll_desc, env);
    AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Shared library to be loaded is %s",dll_name);
    dl_handler = AXIS2_PLATFORM_LOADLIB(dll_name);
    if (!dl_handler)
    {        
#ifndef WIN32
        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Loading shared library %s  Failed. DLERROR IS %s", 
            dll_name, AXIS2_PLATFORM_LOADLIB_ERROR);
#else
        axis2_char_t buff[AXUTIL_WIN32_ERROR_BUFSIZE];
        axutil_win32_get_last_error(buff, AXUTIL_WIN32_ERROR_BUFSIZE);
        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Loading shared library %s  Failed. DLERROR IS %s",dll_name, buff);

我猜问题出在第一行 - dll_name = axutil_dll_desc_get_name(dll_desc, env);dll_name中存储的值为..//lib/axis2_http_sender.dll。虽然axis2_http_sender.dll存在 在lib目录中,相对于可执行文件,链接器无法连接到它。

我从未见过如下文件名语法:

..//lib/axis2_http_sender.dll

我在 Windows命令行中对其进行了测试,结果如下:

../lib/axis2_http_sender.dll

C 中使用连续/的含义是什么? 功能如fopen()?

我确实尝试了几个代码示例。

以下是一段 C 代码:

FILE *fp;
fopen_s(&fp,"C://tempfile.txt", "w");
fputs("Text content", fp);
fclose(fp);

以上代码对我来说很好。

1 个答案:

答案 0 :(得分:2)

终于破解了这个。
这篇CSDN博客文章表明,Axis2C Windows发行版依赖于OpenSSL DLL。

我使用以下命令列出了axis2_apache_server.exe的dll依赖项。

listdlls axis2_apache_server.exe

并且列表显示运行它需要两个ssl dll libeay32ssleay32。但是,这两个dll在Axis2 Binary Distribution中丢失了。

(我不知道为什么&我认为应该包含它。此外,在Axis2文档中没有提到这一点。)

以上dll可以Apache2OpenSSL安装,我将这些dll的路径添加到PATH变量中。

我运行了axis2_apache_server.exe并瞧!!

结论:文件路径中的连续/根本不会影响链接。

道德:首先应检查exe文件的dll依赖关系,并确保在遇到dll加载错误时所有dll都存在。

虽然很难学到道德!!