在尝试使用 VS2012 编译器构建 Qt5 时,我遇到了另一个障碍。
启用 ICU 时(配置命令行上的“-icu”,以及在 VS2012 中正确构建 ICU 的 32 位版本并正确包含所有 ICU 路径(头文件、.lib 和 .dll)),qtbase\src\corelib\codecs\qtextcodec.cpp
返回第 688 行当询问名称为“US-ASCII”的编解码器时,一个 NULL 编解码器(ICU 无法返回编解码器)。
具体来说:
QTextCodec* QTextCodec::codecForLocale()
{
QCoreGlobalData *globalData = QCoreGlobalData::instance();
if (!globalData)
return 0;
QTextCodec *codec = globalData->codecForLocale.loadAcquire();
if (!codec) {
#ifdef QT_USE_ICU
// THIS BLOCK IS REACHED WHEN ICU IS ENABLED
textCodecsMutex()->lock();
// ***
// The following codec returned is NULL!!!
// (Internally, it sets the codec name to "US-ASCII",
// and fails to find a codec with this name)
// ***
codec = QIcuCodec::defaultCodecUnlocked();
textCodecsMutex()->unlock();
#else
// setupLocaleMapper locks as necessary
codec = setupLocaleMapper();
#endif
}
return codec;
}
后来,上面提到的 NULL 编解码器变量被取消引用(在“lrelease.exe”实用程序的代码中),当“lrelease.exe”实用程序作为 Qt5 构建过程的一部分运行并尝试执行翻译时,它崩溃了由于此 NULL 取消引用并导致 Qt 构建因错误而停止。
进入上述QIcuCodec::defaultCodecUnlocked()
函数显示编解码器名称被设置为US-ASCII
,并且找不到具有此名称的编解码器。
因此,在 Qt5 的 VS2012 编译器 32 位构建中包含 ICU 支持似乎是不可能的。
更糟糕的是,因为Webkit
依赖于 Qt5 中的 ICU,这意味着Webkit
也无法构建。
有人可以告诉我这是否很可能是带有 VS2012 的 Qt5 的错误,还是我在构建环境中设置不正确?
同样有用的是,知道是否有人能够使用启用 ICU 支持的 VS2012 编译器构建 Qt5。
我还在Qt 论坛的相关持续线程中发表了评论。