Я столкнулся с другим в long stream of obstacles попытке построить Qt5 с VS2012 компилятором.Поддержка ICU в 32-битной сборке Qt5 с компилятором VS2012 вызывает отказ сборки Qt5; Webkit также поэтому unbuildable
Когда ICU включен («-icu» в командной строке configure, а также надлежащая 32-разрядная сборка ICU в VS2012 и правильное включение всех путей ICU (заголовок, .lib и .dll)), Строка 688 из qtbase\src\corelib\codecs\qtextcodec.cpp
возвращает NULL-кодек (ICU не может вернуть кодек) при запросе кодека с именем «US-ASCII».
В частности:
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
и что кодек с этим именем не найден.
Поэтому представляется невозможным включить поддержку ICU с 32-разрядной сборкой Qt5 с VS2012-компилятором.
Хуже, потому что Webkit
зависит от ICU в пределах Qt5, это значит, что Webkit
не может быть построен.
Может кто-нибудь скажет мне, может ли это быть ошибкой с Qt5 с VS2012, или есть что-то, что я неправильно настраиваю в своей среде сборки?
Использовать также было бы знать, сможет ли кто-нибудь построить Qt5 с помощью компилятора VS2012 с поддержкой ICU.
У меня также есть posted a comment в соответствующей, текущей теме на форуме Qt.
Как возникают проблемы с сборкой? Звучит для меня, что у вас эта проблема во время работы. В VS2012 CRT было внесено изменение, чтобы обеспечить лучшую поддержку локализации. Что не будет работать на XP, потому что у него нет необходимых функций winapi. Так что также упоминайте свою тестовую ОС. –
@HansPassant Это проблема времени выполнения для программы, которая выполняется внутренне как часть сложного скрипта сборки Qt: http://stackoverflow.com/a/15893226/368896 –
@HansPassant (и я строю/запускаю Windows 7, 64-разрядная, но построение Qt как 32-бит под компилятором VS2012.) –