VS2012 コンパイラで Qt5 を構築しようとする長い障害の中で、別の問題に遭遇しました。
ICU が有効になっている場合 (configure コマンド ラインで「-icu」を指定し、VS2012 で ICU を適切に 32 ビット ビルドし、すべての ICU パス (ヘッダー、.lib、および .dll) を適切に含める)、Line 688 がqtbase\src\corelib\codecs\qtextcodec.cpp
返されます。 「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 フォーラムの関連する進行中のスレッドにコメントを投稿しました。