crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Qt + wchar_t + VS2005
Flex Ferrum
  опции профиля:
сообщение 28.11.2007, 3:10
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 26.11.2007
Пользователь №: 26

Спасибо сказали: 0 раз(а)




Репутация:   0  


Суть в следующем. В отличии от предыдущих версий компиляторов, в VC 8.0 интерпретацию типа wchar_t как синонима unsigned short надо включать опцией /Zc:wchar_t-. Т. е. по умолчанию wchar_t интерпретируется этим компилятором как самостоятельный тип. Несложно убедиться, что при сборке Qt эта опция явно указывается. В ряде случаев (наверное даже, в большинстве) это не вызывает особых проблем, но ровно до тех пор, пока Qt не используется в связке с другими библиотеками, как то, например, boost и stl. boost обычно компилируется без этой опции (и это правильно, на мой взгляд), STL (если используется штатная), то полностью зависит от настроек проекта. Так вот, очевидно, что в ряде случаев, совместное использование этих библиотек, собранных с опциями по умолчанию, невозможно, т. к. одни и те же объявления типов (std::wstring, например) начинают интерпретироваться по-разному, и приложение элементарно не линкуется. Я вышел из этой ситуации пересобрав Qt без указанной опции. Понятно, что сборка получилась, гм, несколько нестандартная. Так вот, собственно, вопрос - есть ли другие варианты выхода из такой ситуации?

Сообщение отредактировал Flex Ferrum - 28.11.2007, 3:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_Marat_*
сообщение 1.8.2008, 9:39
Сообщение #2





Гости








    


правильно все - нужно пересобрать Qt, поскольку по стандарту - wchar_t - отдельный тип и троли зря применили такой трюк

в папке mkspec и т.д. в зависимости от версии VS исправить
Zc:wchar_t-
на
Zc:wchar_t

только при такой опции WebKit перестает собираться - сам вчера на это наткнулся - все что нужно - посмотреть на ошибку и поправить в нужном месте
QChar::toCaseFolded(бла..бла..бла)
на
QChar::toCaseFolded(static_cast<ushort>(бла..бла..бла))

но только в нужном месте! (там, где UChar, но не там, где UChar32)

надо сказать, что правильно написаный код должен собираться и с той и с другой опцией, НО! в пределах одного исполняемого модуля (exe, dll) ДОЛЖНЫ использоваться одни и теже параметры компиляции
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.12.2024, 5:50