C++ Xerces-C++库怎么安装和使用

1次阅读

xerces-c++linux/macos用apt或homebrew安装,windows推荐vcpkg;需链接库、包含头文件,并严格调用initialize/terminate及xmlstring::release。

C++ Xerces-C++库怎么安装和使用

在 Linux 或 macOS 上安装 Xerces-C++ 主要靠包管理器或源码编译;Windows 下推荐用 vcpkg 或预编译二进制。使用时需链接库、包含头文件,并注意初始化与内存管理。

Linux/macOS:用包管理器快速安装

ubuntu/debian 系统直接运行:

  • sudo apt install libxerces-c-dev libxerces-c3.2(开发头文件 + 运行时库)
  • macOS 用 Homebrew:brew install xerces-c

安装后头文件通常在 /usr/include/xercesc,库文件在 /usr/lib/usr/local/lib。编译时加 -lxerces-c 链接。

Windows:用 vcpkg 管理最省心

vcpkg 是微软推荐的 C++ 库管理工具,自动处理依赖和构建:

立即学习C++免费学习笔记(深入)”;

  • 先安装 vcpkg,然后执行:vcpkg install xerces-c:x64-windows(或 x86-windows)
  • 集成到 visual studiovcpkg integrate install
  • CMake 项目可加 -DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake

这样就能直接 #include 并链接,无需手动配置路径。

源码编译(跨平台通用,适合定制)

Apache 官网下载源码(如 xerces-c-3.2.4.tar.gz),解压后:

  • Linux/macOS:./configure –prefix=/usr/local && make && sudo make install
  • Windows(MSVC):用 CMake GUI 或命令行生成 VS 解决方案,再用 Visual Studio 编译 INSTALL 项目

注意开启 –enable-transcoder-iconv(Linux/macOS)或确保系统有 iconv 支持,否则中文解析可能出错。

简单 dom 解析示例(验证是否可用)

写个最小可运行代码测试环境是否就绪:

#include <xercesc/parsers/XercesDOMParser.hpp> #include <xercesc/dom/DOM.hpp> #include <xercesc/util/XMLString.hpp> #include <iostream> <p>int main() { try { XMLPlatformUtils::Initialize(); // 必须先调用 XercesDOMParser parser; parser.parse("test.xml"); // 确保该文件存在且格式正确 std::cout << "Parse OKn"; XMLPlatformUtils::Terminate(); // 必须最后调用 } catch (const XMLException& e) { char* msg = XMLString::transcode(e.getMessage()); std::cerr << "Error: " << msg << std::endl; XMLString::release(&msg); } return 0; }

编译命令(Linux 示例):
g++ -o parse parse.cpp -lxerces-c -I/usr/include/xercesc

常见坑和注意事项

Xerces-C++ 行为严谨但容易踩坑:

  • 必须成对调用 XMLPlatformUtils::Initialize()Terminate(),否则程序崩溃或内存泄漏
  • 所有由 Xerces 分配的字符串(如 XMLString::transcode 返回的)必须用 XMLString::release 释放
  • 默认不支持 UTF-8 bom,含 BOM 的 XML 文件需提前去掉,或用 MemBufInputSource 手动跳过
  • 线程下每个线程应有自己的 XercesDOMParser 实例,或确保全局初始化已同步完成

不复杂但容易忽略细节,建议从官方 samples 目录下的例子起步,逐步替换自己的逻辑。

text=ZqhQzanResources