【问题标题】:build xerces c++ version 3 with icu使用 icu 构建 xerces c++ 版本 3
【发布时间】:2012-11-22 20:00:04
【问题描述】:

我想使用 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_ICU。这只是一个猜测,所以首先我查看了 Xerces 代码,我看到 XERCES_USE_TRANSCODER_ICU 确实出现了(例如,他们在包含 ICU 标头之前检查它是否已定义)。

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

PlatformUtils.obj:错误 LNK2019:无法解析的外部符号“公共:__thiscall xercesc_3_1::ICUTransService::ICUTransService(class xercesc_3_1::MemoryManager *)”(??0ICUTransService@xercesc_3_1@@QAE@PAVMemoryManager@1@@Z)在函数“私有:静态类 xercesc_3_1::XMLTransService * __cdecl xercesc_3_1::XMLPlatformUtils::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............\Build\Win32\VC10\Debug\xerces-c_3_1D。 dll : 致命错误 LNK1120: 1 unresolved externals

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

谢谢。

【问题讨论】:

  • 我想通了,我必须从 XercesLib 项目的 util/transcoders 中排除 WIN32TransService.cpp。

标签: c++


【解决方案1】:

因为我遇到了同样的问题,而且这是谷歌搜索它的第一批热门产品之一,所以我会给出答案,尽管你问这个问题已经有一段时间了。 这些是使用 ICU 在 Visual Studio 中构建 Xerces-c 的步骤(我在 VS10 中工作):

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

【讨论】:

    猜你喜欢
    • 2011-03-05
    • 2012-10-06
    • 2019-05-28
    • 1970-01-01
    • 2018-06-16
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多