【发布时间】: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++