1

我编写了一个 C++ 模块来调用 Xerces C++ XML 库来解析 XML 文件。我无法通过这些更改启动 httpd.exe。以下是详细信息-

a) Apache 服务器版本:httpd-2.4.4-win64 b) Xerces 版本:xerces-c-3.1.1-x86_64-windows-vc-10.0 c) 开发环境:Visual Studio 2010 with SP1

以下是我在 Visual Studio 中所做的设置,以便 C++ 模块引用 Xerces 库: 1. Additional Include Directories = E:\xerces-c-3.1.1-x86_64-windows-vc-10.0\xerces-c- 3.1.1-x86_64-windows-vc-10.0\包括

  1. 附加依赖项 = xerces-c_3.lib 和 xerces-c_static_3.lib

  2. 其他库目录 = E:\xerces-c-3.1.1-x86_64-windows-vc-10.0\xerces-c-3.1.1-x86_64-windows-vc-10.0\lib

  3. 调试 -> 环境:PATH=E:\xerces-c-3.1.1-x86_64-windows-vc-10.0\xerces-c-3.1.1-x86_64-windows-vc-10.0\bin

  4. 在操作系统环境变量中,将路径 E:\xerces-c-3.1.1-x86_64-windows-vc-10.0\xerces-c-3.1.1-x86_64-windows-vc-10.0\bin 添加到环境变量中小路

  5. 我的 C++ 模块中调用 Xerces 库例程的代码如下所示 -

    尝试 { XMLPlatformUtils::Initialize(); // 初始化 Xerces 基础结构 } catch( XMLException& e ) { char* message = XMLString::transcode( e.getMessage() ); XMLString::release( &message ); } XMLPlatformUtils::Terminate();

  6. 在 httpd.conf 文件中添加了以下内容 - LoadModule filter_module modules/XercesDLL.dll AddOutputFilterByType TagFilter text/html text/plain text/css

  7. 如果我尝试从命令提示符启动 httpd.exe,我会看到以下错误 -

    httpd.exe httpd.exe:E:/httpd-2.4.4-win64/Apache24/conf/httpd.conf 第 172 行的语法错误:无法将模块/XercesDLL.dll 加载到服务器中:找不到指定的模块.

即使我在步骤 6 中注释掉上面的 C++ 代码,Apache 仍然无法启动。这意味着 Apache 无法加载我正在使用的 Xerces 库版本,无论我调用该库的方式如何。

但是,如果我编写一个调用上述 Xerces 库版本的独立 DLL,并从 EXE 调用这个 DLL,那么我就能够成功地解析 XML。这意味着,Xerces 库由于某种原因无法仅由 Apache 服务器加载。

我认为它与 C 到 C++ 的链接有关,不确定。

非常感谢任何帮助。

谢谢。

4

0 回答 0