Axis2 无法加载 DLL

sjs*_*sam 3 c apache-axis

我在 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.
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

我猜问题出在第一行 - 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

在 fopen() 这样的C/函数中使用连续的 s有何含义 ?

我确实尝试了一些代码示例。

下面是一段C代码:

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

上面的代码对我来说效果很好。

sjs*_*sam 5

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

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

listdlls axis2_apache_server.exe
Run Code Online (Sandbox Code Playgroud)

列表显示运行它需要两个 ssl dlllibeay32和。ssleay32然而,Axis2 二进制发行版中缺少这两个 dll。

(我不知道为什么,我认为它应该被包含在内。而且 Axis2 文档中没有提及这一点。)

上述 dll 可在以下任一版本中使用Apache2,或者OpenSSL安装我将这些 dll 的路径添加到我的 PATH 变量中。

我运行了 axis2_apache_server.exe ,瞧!!

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

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

虽然道德很难学!!