背景
我们在相当大的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(链接方式)。那就是:
我们不能成为唯一有此问题的人,还是我们只是白痴? (这将是最好的方案......:))
答案 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”的代码...