Axis2无法加载DLL

我在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

在fopen()等C函数中使用连续/ s的含义是什么?

我尝试了几个代码示例。

下面是一段C代码:

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

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

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

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

 listdlls axis2_apache_server.exe 

并且列表显示两个ssl dlls libeay32ssleay32都需要运行它。 但是,Axis2 Binary Distribution中缺少这两个dll。

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

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

我跑了axis2_apache_server.exe,瞧!!

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

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

尽管学到的道德很难!!