xalan和xerces的多个版本

时间:2014-01-29 15:47:30

标签: c++ xml linux xalan xerces-c

背景

我们在相当大的C ++系统中依赖于几个Xalan和Xerces版本。这种情况多年来一直在积累,并且由于几个原因而不是最佳的。

现在我们正在从Solaris迁移到Linux,我们认为将第三方依赖项合并到最低限度是有意义的。

我们已经确定我们仍然需要Xerces 2.8和Xerces 3.x.和Xalan 1.x

目标平台是RHEL6。

问题

从RHEL repo我们可以获得Xerces 3.0和Xalan 1.10(针对Xerces 3.0构建)

我们在/ usr / local ...

下安装了Xerces 2.8

我们无法弄清楚Xalan如何使用Xerces(链接方式)。那就是:

  • 我们需要两个Xalan库,一个是针对3.x而另一个针对2.8?
  • 我们可以有一个Xalan版本,比方说1.11,(通过一些魔术)可以同时使用xerces版本吗?

我们不能成为唯一有此问题的人,还是我们只是白痴? (这将是最好的方案......:))

2 个答案:

答案 0 :(得分:1)

根据我刚刚在xerces.apache.org上阅读的内容,Xerces 2.X和Xerces 3.x有不同的API,因此您需要链接一个或另一个。

从xalan.apache.org可以看到:

“Xalan-C / C ++ 1.11库需要Xerces-C / C ++ XML Parser 3.0或更新,版本3.1.1是首选。”,而Xalan 1.10需要Xerces 2.7.0(可能适用于2.8.0) )。

所以是的,您将需要两个不同版本的Xalan库,除非您只能将依赖关系解析为Xalan 1.11.0,在这种情况下,您只能安装一个Xalan和一个Xerces。

答案 1 :(得分:0)

大概所有xerces + xalan的问题都是由于Xerces_autoconf_config.hpp(生成的标头)中XML字符“ XMLCh ”的xerces定义。我一直在尝试在Windows xerces 3.2.2和xalan 1.11上构建,并遇到类型错误的匹配 ... 例如,DirectoryEnumerator.hpp,结构FindFileStruct具有功能:

const XalanDOMChar* getName() const
{
  return name;
}

名称是“ wchar_t名称[260];”来自corecrt_wio.h,结构_wfinddata64i32_t(它是Windows的一部分...)。 XalanDOMChar是“ XMLCh”的typedef。

由于某些原因,xerces 3.1.1生成XMLCh为“ wchar_t ”,但xerces 3.2.2生成为“ char16_t ”。而且xalan有一些针对“ wchar_t”的代码...