You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编译时如何正确链接xercesc库?Makefile编译报错如何解决

问题解决方法

1 修复Makefile无效链接参数

你当前的LDLIBS末尾多了半截不完整的-Wl,-rpath参数,会导致ld错误将后续的目标文件当作rpath的参数处理,不会把Test1.o加入链接列表,直接触发undefined reference to main报错。
修改LDLIBS配置,删除末尾多余的-Wl,-rpath:

LDLIBS = -lxerces-c -lm

同时调整链接命令的顺序,依赖库放在目标文件后方,避免符号解析失败:

Test1: Test1.o
        $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)

2 补充ICU依赖配置

你使用的xerces-c库编译时依赖ICU 68版本,当前链接路径未包含ICU库,所以会报libicui18n.so.68、libicuuc.so.68、libicudata.so.68找不到的错误。
先找到本机ICU 68版本的安装路径,假设库文件在/path/to/icu68/lib,头文件在/path/to/icu68/include,修改Makefile配置:

  • 在INCLUDE中添加ICU头文件路径:-I/path/to/icu68/include
  • 在LIBDIR中添加ICU库路径:-L/path/to/icu68/lib
  • 在LDFLAGS的rpath中追加ICU库路径:-Wl,-rpath,$(XERCES_LIB):/path/to/icu68/lib
  • 在LDLIBS中补充ICU链接参数:-licui18n -licuuc -licudata

3 修复Xerces代码逻辑问题

你当前的代码缺少Xerces必要的初始化步骤,就算编译通过运行也会崩溃,同时节点名输出逻辑也有问题,修改后的代码参考:

#include <xercesc/dom/DOMNode.hpp>
#include <xercesc/dom/DOMElement.hpp>
#include <xercesc/dom/DOMNodeList.hpp>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/util/XMLPlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
#include <string>
#include <iostream>
#include <map>

using namespace std;
using namespace xercesc;


int main() {
  // 初始化Xerces环境
  XMLPlatformUtils::Initialize();

  string scRes = "scRes.xml";

  XercesDOMParser* parser = new XercesDOMParser;
  parser->parse(scRes.c_str());

  DOMNodeList* nodeList = parser->getDocument()->getDocumentElement()->getChildNodes();
  DOMNode* root = nodeList->item(0);

  // 转码XMLCh为char*后输出
  char* rootName = XMLString::transcode(root->getNodeName());
  std::cout << rootName << endl;
  XMLString::release(&rootName);

  for (unsigned int i = 0; i < root->getChildNodes()->getLength(); i++) {
    DOMNode* curr = root->getChildNodes()->item(i);
    char* currName = XMLString::transcode(curr->getNodeName());
    std::cout << currName << endl;
    XMLString::release(&currName);
  }

  // 释放资源,关闭Xerces环境
  delete parser;
  XMLPlatformUtils::Terminate();
  return 0;
}

内容的提问来源于stack exchange,提问作者eddieisnutty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:48:03