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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 4)
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  


Цитата(ViGOur @ 28.11.2007, 10:31) *
Вот что написано у тролей по поводу использования stl:

Если бы проблема была именно в этом... Нестыковки получаются, например, вот в какой момент: из Qt-шного контрола получается строка, помещается в свой класс (в виде std::wstring), после чего этот класс серелизуется с помощью boost::seriazliation. Поскольку часть библиотеки бустовской серелизации предкомпилируется, то в итоге сборка такого приложения валится на линковке с руганью, что не может найти нужных методов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_42na_*
сообщение 3.6.2008, 15:43
Сообщение #4





Гости








    


у меня помоему похожая проблема... помогите плз
Linking...
  • qtmaind.lib(qtmain_win.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::locale::facet::_Register(void)" (__imp_?_Register@facet@locale@std@@QAEXXZ) referenced in function "class std::ctype<char> const & __cdecl std::use_facet<class std::ctype<char> >(class std::locale const &)" (??$use_facet@V?$ctype@D@std@@@std@@YAABV?$ctype@D@0@ABVlocale@0@@Z)
  • qtmaind.lib(qtmain_win.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static unsigned int __cdecl std::ctype<char>::_Getcat(class std::locale::facet const * *)" (__imp_?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z) referenced in function "class std::ctype<char> const & __cdecl std::use_facet<class std::ctype<char> >(class std::locale const &)" (??$use_facet@V?$ctype@D@std@@@std@@YAABV?$ctype@D@0@ABVlocale@0@@Z)
  • qtmaind.lib(qtmain_win.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static unsigned int __cdecl std::ctype<unsigned short>::_Getcat(class std::locale::facet const * *)" (__imp_?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z) referenced in function "class std::ctype<unsigned short> const & __cdecl std::use_facet<class std::ctype<unsigned short> >(class std::locale const &)" (??$use_facet@V?$ctype@G@std@@@std@@YAABV?$ctype@G@0@ABVlocale@0@@Z)


У меня 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) ДОЛЖНЫ использоваться одни и теже параметры компиляции
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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