Qt + wchar_t + VS2005 |
Здравствуйте, гость ( Вход | Регистрация )
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 |
|
|
ViGOur |
28.11.2007, 10:31
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Вот что написано у тролей по поводу использования stl:
Цитата If you want to use stl in a non Qt sentence, then you don't need to enable this option, but it would be wise to do CONFIG+=stl in your .profile as this turns it on in the compiler if necessary. Visual C++ needs stl to be turned on in your .pro file for example, otherwise it will issue a lot of warnings that mention the -GX option.
|
|
|
Flex Ferrum |
28.11.2007, 14:07
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 26.11.2007 Пользователь №: 26 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот что написано у тролей по поводу использования stl: Если бы проблема была именно в этом... Нестыковки получаются, например, вот в какой момент: из Qt-шного контрола получается строка, помещается в свой класс (в виде std::wstring), после чего этот класс серелизуется с помощью boost::seriazliation. Поскольку часть библиотеки бустовской серелизации предкомпилируется, то в итоге сборка такого приложения валится на линковке с руганью, что не может найти нужных методов. |
|
|
Гость_42na_* |
3.6.2008, 15:43
Сообщение
#4
|
Гости |
у меня помоему похожая проблема... помогите плз
Linking...
У меня VS 2008, QT 4.4.0 (Full) |
|
|
Гость_Marat_* |
1.8.2008, 9:39
Сообщение
#5
|
Гости |
правильно все - нужно пересобрать Qt, поскольку по стандарту - wchar_t - отдельный тип и троли зря применили такой трюк
в папке mkspec и т.д. в зависимости от версии VS исправить Zc:wchar_t- на Zc:wchar_t только при такой опции WebKit перестает собираться - сам вчера на это наткнулся - все что нужно - посмотреть на ошибку и поправить в нужном месте QChar::toCaseFolded(бла..бла..бла) на QChar::toCaseFolded(static_cast<ushort>(бла..бла..бла)) но только в нужном месте! (там, где UChar, но не там, где UChar32) надо сказать, что правильно написаный код должен собираться и с той и с другой опцией, НО! в пределах одного исполняемого модуля (exe, dll) ДОЛЖНЫ использоваться одни и теже параметры компиляции |
|
|
Текстовая версия | Сейчас: 23.12.2024, 5:53 |