使用icu构建xerces-c++版本3

build xerces c++ version 3 with icu

本文关键字:版本 xerces-c++ 构建 icu 使用      更新时间:2023-10-16

我想使用Visual c++express 2010构建带有ICU的Xerces 3.1.1。

我已经下载了ICU的源代码,并按照自述中所说的那样构建了它。

现在我需要用我刚刚构建的ICU二进制文件来构建Xerces。

Xerces网站3.1.1版本的构建说明指出,"您也可以选择Xerces-C++库是否应该使用ICU进行代码转换",但没有具体说明如何使用。我查看了所有的构建选项,唯一发现的(也许我错过了什么?)可能是相关的预处理器宏列表,我看到了以下定义-XERCES_USE_TRANSCODER_WINDOWS。

我想也许我需要将其更改为XERCES_USE_TRANSCODER_ICOU。这只是一个猜测,所以首先我查看了Xerces代码,发现Xerces_USE_TRANSCODER_ICOU确实出现了(例如,他们在包括ICU头之前检查它是否已定义)。

因此,我将XERCES_USE_TRANSCODER_WINDOWS更改为XERCES_USE_TRANSCODER _ICU,将ICU include目录添加到include目录路径,将所有ICU.lib文件添加到链接器依赖项,并尝试这样构建它。我得到未解决的外部错误:

PlatformUtils.obj:错误LNK2019:未解析的外部符号"public:__thiscall xercesc_3_1::ICUTransService::ICUTransService(类xercesc.3_1::MemoryManager*)"(??0ICUTransService@xercesc_3_1@@QAE@PAVMemoryManager@1@@Z)在函数"private:static class xercesc_3_1::XMLTransService*__cdecl xercesc_3 _1::XML PlatformUtils::makeTransService(void)"(?makeTransService@XMLPlatformUtils@xercesc_3_1@@CAPAVXMLTransService@2@XZ)1> C:\cpp_lib\xerces-C-3.1.1\projects\Win32\VC10\xerces-all\XercesLib。。。。。。。。。。。\内部版本\W32\VC10\Debug\xerces-c_3_1D.dll:致命错误LNK1120:1个未解析的外部

Xerces网站为使用ICU构建Xerces 2.8提供了更具体的说明(它在版本3上不起作用,因为它是通过版本3没有提供的脚本完成的)。我也尝试过(尽管我需要使用最新版本),但效果也不好。没有创建.dll或.lib文件。

谢谢。

因为我遇到了同样的问题,而且这是谷歌第一次找到它,所以我会给出答案,尽管你问这个问题已经有一段时间了。以下是在Visual Studio中使用ICU:构建Xerces-c的步骤(对我来说是在VS10中工作的)

  1. 按照说明下载并构建ICU
  2. 使用VS打开xerces-all.sln解决方案文件
  3. 选择ICU调试/发布构建配置-它为您设置XERCES_USE_TRANSCODER_ICU
  4. 将ICU的include和库路径添加到XercesLib项目的目录中,将ICU库添加到该项目的其他链接器依赖项中
  5. 构建并快乐-无需排除WIN32TransService.cpp