Russian Qt Forum
Ноябрь 27, 2024, 06:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Qt 4.5 не хочет со мной дружить  (Прочитано 25335 раз)
SABROG
Гость
« : Март 07, 2009, 12:52 »

Расскажу с самого начала. На работе у меня стоит Win2k SP4. Я качал несколько раз QtCreator полную сборку с исходниками и скомпиленными библиотеками (порядка 200Мб). Сам QtCreator работать отказывался на этой ОС, крашился то при запуске, то в любое другое ему удобное время. В результате я использовал исходники Qt и библиотеки идущие вместе с ним через консоль и vim. Через какое-то время мне понадобилось собрать пример с использованием phonon, чтобы подтвердить утечку памяти в этом модуле. Как оказалось QtCreator идет без собранного phonon... Тогда я не стал предпринимать каких-то попыток его собрать.

Вышел Qt 4.5. Я скачал SDK, но обнаружил все ту же проблему с крашами QtCreator'a. Как потом показал отладчик проблема затаилась в классе QWizard модуля QtGui4. Т.е. проблема, видимо, в том, что исходники собирали под ОС выше Win2k (в Vista'e я так думаю). Естественно встал вопрос о ручной компиляции исходников Qt 4.5 и затем QtCreator'a на базе скомпиленных библиотек. Я забрал сорцы QtCreator'a через git и скачал snapshot Qt 4.5 с троллевского ftp.

Чтобы скомпилить исходники я задал такую конфигурацию:
Код:
configure -debug-and-release -qt-sql-sqlite -qt-sql-odbc -qt-libtiff -qt-gif -qt-libpng -qt-libmng -phonon -dbus -webkit -qt-libjpeg -qt-zlib -no-style-windowsxp -no-style-windowsvista -fast
(стили XP/Vista пришлось отключить из-за того, что в предыдущие разы (Qt 4.3) попытка собрать исходники Qt с этими стилями приводили к error'aм, не стал рисковать, чтобы снова не напороться).

А теперь самое интересное. Процесс компиляции прервался из-за того, что возникли проблемы у ld с линковкой библиотек. Как оказалось всему виной оказалась переменная окружения в LIB в которой было это:

Код:
lib=C:\Program Files\SQLXML 4.0\bin\

Microsoft подложил свинью... Обнулил переменные LIB и INCLUDE. Запустил снова компиляцию, процесс пошел дальше.
Следующий вылет произошел из-за -qdbus. Оказывается ему надо качать и предустанавливать библиотеки. Сделал make confclean, отрубил этот dbus. Запустил компиляцию заново.
Следующий вылет произошел на этапе сборки QtWebKit.
Код:
"bridge\c" -I"bridge\qt" -I"generated" -I"plugins\win" -I"..\..\sqlite" -I"..\..
\..\..\include\phonon" -I"..\..\..\..\include\ActiveQt" -I"tmp\moc\debug_shared"
 -I"." -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\debug_shared\WebKit_pch.h.gc
h\c++ ..\WebKit\qt\WebKit_pch.h
Слишком длинная входная строка.
Т.е. параметров слишком много. Пошел другим путем, ну думаю попробую на путях сократить. Кинул исходники в папку "c:\q". Короче некуда! Получил ту же ошибку все-равно.

Ну думаю ладно - настало время попробовать это в MSYS. Пришлось опять сделать make confclean и переконфигурацию, т.к. возник косяк с попыткой войти в папку "src\winmain", причем путь в ошибке был указан как "srcwinmain". Т.е. привычная виндовая косая черта теперь управляющий символ как в C++... В общем дело снова дошло до компиляции QtWebKit и я получил туже самую ошибку "Слишком длинная входная строка." (правда теперь в виде иероглифов).

Начал мучать гугл. Узнал такую вещь, что mingw32-make и make от MSYS - разные программы. А я обычно тупо копирую mingw32-make и переименовываю в make.exe, чтобы eclipse и другие среды разработок его находили. Для эксперимента пришлось удалить make.exe (тот который mingw32-make) и попробовать собрать через make.exe (который от MSYS в папке C:\msys\1.0\bin). Сначала я никаких изменений не заметил, но потом выяснилось, что я спецом обнулил пути в PATH, чтобы туда не затисалось ничего лишнего, как оказалось затер важные пути: ".:/usr/local/bin:/bin:"
Восстановил. Поставил компиляцию и получил опять вылет, но уже на phonon'e.

Код:
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DPHONON_MAKE_QT_ONLY_BACKEND -DQT_DLL -DQT_PLUGIN -DQT_PHONON_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I'../../../../include/QtCore' -I'../../../../include/QtGui' -I'../../../../include/phonon' -I'../../../../include' -I'../../../../include/ActiveQt' -I'tmp/moc/debug_shared' -I'.' -I'../../../../mkspecs/win32-g++' -o tmp/obj/debug_shared/abstractvideorenderer.o ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp
In file included from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:7,
                 from ../../../3rdparty/phonon/ds9/compointer.h:22,
                 from ../../../3rdparty/phonon/ds9/backendnode.h:26,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/strmif.h:892: error: expected `;' before '*' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/strmif.h:991: error: `LPDDPIXELFORMAT' does not name a type
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/strmif.h:1027: error: declaration of `GUID tagVMRGUID::GUID'
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/winnt.h:1734: error: changes meaning of `GUID' from `typedef struct _GUID GUID'
In file included from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:8,
                 from ../../../3rdparty/phonon/ds9/compointer.h:22,
                 from ../../../3rdparty/phonon/ds9/backendnode.h:26,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:7:20: dsound.h: No such file or directory
In file included from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:8,
                 from ../../../3rdparty/phonon/ds9/compointer.h:22,
                 from ../../../3rdparty/phonon/ds9/backendnode.h:26,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:19: error: `GetDirectSoundInterface' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:19: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:20: error: `GetPrimaryBufferInterface' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:20: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:21: error: `GetSecondaryBufferInterface' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:21: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:23: error: `ReleaseDirectSoundInterface' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:23: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:24: error: `ReleasePrimaryBufferInterface' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:24: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:25: error: `ReleaseSecondaryBufferInterface' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amaudio.h:25: error: expected `;' before '(' token
In file included from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:9,
                 from ../../../3rdparty/phonon/ds9/compointer.h:22,
                 from ../../../3rdparty/phonon/ds9/backendnode.h:26,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:7:19: ddraw.h: No such file or directory
In file included from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:9,
                 from ../../../3rdparty/phonon/ds9/compointer.h:22,
                 from ../../../3rdparty/phonon/ds9/backendnode.h:26,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:56: error: expected `;' before "rcTarget"
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:91: error: `GetCaps' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:91: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:92: error: `GetDirectDraw' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:92: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:93: error: `GetEmulatedCaps' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:93: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:95: error: `GetSurfaceDesc' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:95: error: expected `;' before '(' token
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:99: error: `SetDirectDraw' declared as a `virtual' field
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/amvideo.h:99: error: expected `;' before '(' token
In file included from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:17,
                 from ../../../3rdparty/phonon/ds9/compointer.h:22,
                 from ../../../3rdparty/phonon/ds9/backendnode.h:26,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/bdatypes.h:21: error: `dwOffset' does not name a type
In file included from ../../../3rdparty/phonon/ds9/compointer.h:22,
                 from ../../../3rdparty/phonon/ds9/backendnode.h:26,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:84: error: `DDSCAPS2' does not name a type
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:85: error: `DDPIXELFORMAT' does not name a type
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:97: error: `DDPIXELFORMAT' does not name a type
c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../../include/dshow.h:102: error: `DDPIXELFORMAT' does not name a type
In file included from ../../../3rdparty/phonon/ds9/abstractvideorenderer.h:20,
                 from ../../../3rdparty/phonon/ds9/abstractvideorenderer.cpp:18:
../../../3rdparty/phonon/ds9/backendnode.h:37: error: `IPin' was not declared in this scope
../../../3rdparty/phonon/ds9/backendnode.h:37: error: template argument 1 is invalid
../../../3rdparty/phonon/ds9/backendnode.h:37: error: ISO C++ forbids declaration of `InputPin' with no type
../../../3rdparty/phonon/ds9/backendnode.h:38: error: `IPin' was not declared in this scope
../../../3rdparty/phonon/ds9/backendnode.h:38: error: template argument 1 is invalid
../../../3rdparty/phonon/ds9/backendnode.h:38: error: ISO C++ forbids declaration of `OutputPin' with no type
../../../3rdparty/phonon/ds9/backendnode.h:39: error: `IBaseFilter' was not declared in this scope
../../../3rdparty/phonon/ds9/backendnode.h:39: error: template argument 1 is invalid
../../../3rdparty/phonon/ds9/backendnode.h:39: error: ISO C++ forbids declaration of `Filter' with no type
../../../3rdparty/phonon/ds9/backendnode.h:40: error: `IGraphBuilder' was not declared in this scope
../../../3rdparty/phonon/ds9/backendnode.h:40: error: template argument 1 is invalid
../../../3rdparty/phonon/ds9/backendnode.h:40: error: ISO C++ forbids declaration of `Graph' with no type
mingw32-make[8]: *** [tmp/obj/debug_shared/abstractvideorenderer.o] Error 1
mingw32-make[8]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0/src/plugins/phonon/ds9'
mingw32-make[7]: *** [debug-all] Error 2
mingw32-make[7]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0/src/plugins/phonon/ds9'
c:\mingw\bin\mingw32-make.exe[6]: *** [all] Error 2
c:\mingw\bin\mingw32-make.exe[6]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0/src/plugins/phonon/ds9'
mingw32-make[5]: *** [sub-ds9-make_default] Error 2
mingw32-make[5]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0/src/plugins/phonon'
c:\mingw\bin\mingw32-make.exe[4]: *** [all] Error 2
c:\mingw\bin\mingw32-make.exe[4]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0/src/plugins/phonon'
mingw32-make[3]: *** [sub-phonon-make_default] Error 2
mingw32-make[3]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0/src/plugins'
c:\mingw\bin\mingw32-make.exe[2]: *** [all] Error 2
c:\mingw\bin\mingw32-make.exe[2]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0/src/plugins'
c:\mingw\bin\mingw32-make.exe[1]: *** [sub-plugins-make_default-ordered] Error 2
c:\mingw\bin\mingw32-make.exe[1]: Leaving directory `c:/SABROG/qt-win-opensource-src-4.5.0'
make: *** [all] Error 2
Причем ошибка где-то внутри MinGW'шных хедерах. У меня устарел MinGW?
Поставил MinGW тот, который идет вместе с SDK.
Запустил снова компиляцию и получил те же самые ошибки.

Следующим своим шагом я вижу опять make confclean, отрубание phonon'a.(а что такое phonon-backend?)
Я уже замучался все заново переконфигурировать и пересобирать. Возможно ли как-то сказать Qt
не компилировать модуль, который не собирается, оставив то что уже скомпиленно и от него не зависит?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Март 07, 2009, 13:03 »

>>Т.е. параметров слишком много. Пошел другим путем, ну думаю попробую на путях сократить. Кинул исходники в папку "c:\q". Короче некуда! Получил ту же ошибку все-равно.
речь не идет о пути, речь идет о строку аргументов, а они длинные, WebKit на двух тоннике не собирается с помощью MinGW. И не собирается со времен 4.4.х.

>>Возможно ли как-то сказать Qt не компилировать модуль, который не собирается, оставив то что уже скомпиленно и от него не зависит?
Выходит тебе ни phonon ни WebKit не обязательны. Дак и несобирай их вовсе. Я так для двухтонника собирал:
Код:
configure -shared -debug-and-release -plugin-sql-odbc -plugin-sql-sqlite -qt-zlib -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -no-phonon  -no-phonon-backend
Записан

Юра.
Rcus
Гость
« Ответ #2 : Март 07, 2009, 13:15 »

Да, есть такая проблема со слишком длинными путями Улыбающийся В Win2k ограничение 4096 байт на длину команды, в WinXP ограничение подняли до 8192
Записан
SABROG
Гость
« Ответ #3 : Март 07, 2009, 13:19 »

Насчет аргументов это мне и так понятно. Просто пути передаются через ключ -I, и естественно это место жрет. Больше я не нашел на каких параметрах можно сэкономить. Раньше это помогало, теперь нет.

Нет ну какже без WebKit'a и phonon'a, я раньше без них жил? Я хочу иметь "All In One", чтобы и ютуб через webview проигрывался со звуком. И dbus тоже хочу. Не хочу себе в чем-то отказывать, а стилями могу поступится ибо они ОС-зависимые. И вообще хочу, чтобы ключи SSE2/MMX работали для MinGW и оптимизацию -O3 и чтобы Qt при этом не крашилось Показает язык
« Последнее редактирование: Март 07, 2009, 13:21 от SABROG » Записан
Rcus
Гость
« Ответ #4 : Март 07, 2009, 13:28 »

А DBus вообще только для Unix, также как и ActiveQt только для Windows платформы Улыбающийся
Записан
BRE
Гость
« Ответ #5 : Март 07, 2009, 13:33 »

А DBus вообще только для Unix, также как и ActiveQt только для Windows платформы Улыбающийся
D-Bus есть и в венде, freedesktop, однако.  Подмигивающий
Записан
SABROG
Гость
« Ответ #6 : Март 07, 2009, 13:37 »

Да, под виндой тоже работает. Хотелось бы подебасить, межпрограммное взаимодействие, все дела.
Записан
crackedmind
Гость
« Ответ #7 : Март 07, 2009, 13:39 »

Вообще-то написано ж что фонон не компилируется на мингв. Ему же директикс нужен.
Записан
SABROG
Гость
« Ответ #8 : Март 07, 2009, 13:50 »

В общем одна проблема потянула за собой другую. Из-за того, что тролли не хотят адаптировать код под SSE, MMX для gcc - невозможно собрать модули directx для phonon'a, т.к. они требуют этой оптимизации.
Эхх, нашелся бы человек, который переписал бы ядро Qt таким образом, чтобы генерировался парвильный код с SSE/MMX оптимизацией на MinGW Подмигивающий В *nix'ах походу это все работает без оптимизации, там же нет directx'a?
Записан
crackedmind
Гость
« Ответ #9 : Март 07, 2009, 13:54 »

на никсах ,вроде, через gstreamer бэкенд фонон работает

И связи адаптации кода SSE/MMX под gcc и directx не понял. Лучше майкрософт пнуть, чтоб сдк не только для визуал студио выходило Улыбающийся)
« Последнее редактирование: Март 07, 2009, 14:03 от crackedmind » Записан
SABROG
Гость
« Ответ #10 : Март 07, 2009, 14:05 »

на никсах ,вроде, через gstreamer бэкенд фонон работает
Это здесь обсуждалось. http://www.prog.org.ru/topic_8423_0.html
Ну обидно чесслово, QtCreator - компилер MinGW, а на ютубе тролли выкладывают демки скомпиленные в мягкотелом вижуале. Типа посмотрите чего теперь можно, качайте QtCreator и получайте фигу Улыбающийся

Насчет MMX написано тут - http://qt-rus.wikidot.com/qt4-mingw-phonon
Но если честно, то я сам до конца не понимаю как это все завязано и почему нельзя тупо отключить этот злополучный MMX, чтобы прилинковать DirectX SDK собранный в студии.

Тему наверно можно перенести сюда http://www.prog.org.ru/board_48_0.html
« Последнее редактирование: Март 07, 2009, 14:24 от SABROG » Записан
crackedmind
Гость
« Ответ #11 : Март 07, 2009, 14:25 »

А почему бы не компилировать на VC++ 2008 Express Edition. QtCreator нормально подтягивает этот компилятор. Даже вроде отладка работает.
Записан
BRE
Гость
« Ответ #12 : Март 07, 2009, 14:33 »

А почему бы не компилировать на VC++ 2008 Express Edition. QtCreator нормально подтягивает этот компилятор. Даже вроде отладка работает.
А он бесплатный?
Записан
SABROG
Гость
« Ответ #13 : Март 07, 2009, 14:37 »

Прикол, пост годичной давности созданный мной - http://forum.vingrad.ru/index.php?showtopic=192829&view=findpost&p=1426171

Как все забывается то Улыбающийся
Записан
crackedmind
Гость
« Ответ #14 : Март 07, 2009, 14:39 »

Естественно бесплатный.
По поводу отладки. 1.0 похоже не поддерживает отладку майкрософтским дебаггером. Зато в репозатарии уже есть, через CDB. Для этого нужно поставить Debugging tools for windows. Как проверю, отпишусь.

Из ссылки.
Цитировать
Apparently, Phonon needs -direct3d flag under MinGW.
The problem is that when qpaintengine_d3d.cpp is built, it needs MMX and
SSE support so the compilation fails.
And I know Trolltech/Qt4 does NOT support MMX and SSE with MinGW
(because serious bugs).
Does it means that Phonon can not be built under MinGW? Грустный
Ну я на VC++ собирал Qt с фононом и опцией -no-direct3d и все работает. Правда я видео не пробывал проигрывать Улыбающийся
« Последнее редактирование: Март 07, 2009, 14:42 от crackedmind » Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.