我在试图用VS2012编译器构建Qt5的long stream of obstacles中遇到了另一个。
如果启用了ICU (配置命令行上的“-icu”,以及VS2012中正确的32位ICU构建和所有ICU路径(报头、.lib和.dll)的正确包含),则当询问名称为"US-ASCII“的编解码器时,qtbase\src\corelib\codecs\qtextcodec.cpp
的第688行返回一个空编解码器(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论坛上有一个相关的、正在进行的帖子中的posted a comment。
发布于 2013-07-12 11:55:04
Qt默认使用UTF-8。假设ICU51.2,在U_CHARSET_IS_UTF8定义为1的情况下重新构建ICU.可以是:#在source\common\unicode\platform.h中定义它(参见关于第523行的注释),或者您也可以在allinone.sln的所有ICU项目中将其添加到构建中(例如,右键单击,选择属性,选择配置属性>C/C++>预处理器,然后将其添加到预处理器定义中)。
https://stackoverflow.com/questions/15975608
复制相似问题