long stream of obstacles에서 VS2012 컴파일러로 Qt5를 빌드하려고 시도했습니다.VS2012 컴파일러와 함께 Qt5의 32 비트 빌드에서 ICU를 지원하면 Qt5 빌드 오류가 발생합니다. 따라서 Webkit도 빌드 할 수 없습니다.
ICU를 사용할 때 (configure 명령 줄에서 "-icu", VS2012의 ICU가 32 비트 빌드 됨, 모든 ICU 경로 (header, .lib 및 .dll)가 올바르게 포함됨)의 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
으로 설정되어 있고이 이름을 가진 코덱을 찾을 수 없다는 것을 알 수 있습니다.
그러므로 VS2012- 컴파일러 32 비트 Qt5 빌드로 ICU 지원을 포함하는 것은 불가능한 것처럼 보입니다.
더욱 나쁜 것은 Webkit
은 Qt5 내의 ICU에 의존하기 때문에 Webkit
도 만들 수 없음을 의미합니다.
누군가 VS2012가있는 Qt5의 버그 일 가능성이 있는지 또는 내 빌드 환경에서 올바르게 설정하지 않는 것이 있는지 알려주실 수 있습니까?
ICT 지원이 활성화 된 VS2012 컴파일러로 Qt5를 빌드 할 수 있는지 여부도 알고 있어야합니다.
나는 또한 posted a comment을 Qt 포럼의 관련 스레드에 포함하고 있습니다.
어떻게 이러한 빌드 문제가 있습니까? 소리가 나에게 런타임에이 문제가있어. 더 나은 현지화 지원을 제공하기 위해 VS2012 CRT가 변경되었습니다. 필요한 winapi 기능이 없기 때문에 XP에서는 작동하지 않습니다. 따라서 테스트 OS에 대해서도 언급하십시오. –
@HansPassant 이것은 복잡한 Qt 빌드 스크립트의 일부로 내부적으로 실행되는 프로그램의 런타임 문제입니다. http://stackoverflow.com/a/15893226/368896 –
@HansPassant (그리고 저는 Windows 7, 64 비트, 그러나 VS2012 컴파일러에서 Qt를 32 비트로 빌드하십시오.) –