Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: saardukar от Апрель 20, 2008, 20:33



Название: Сборка Qt + Mingw 4.3.0
Отправлено: saardukar от Апрель 20, 2008, 20:33
  Здравствуйте!
Искал собирал ли кто Qt с помощью Mingw с компилятором gcc 4-х версий. Нашел одну тему, но решиний реально предложено там не было.

У меня стоит Mingw 4.3.0. Знаю, что альфа:) но компилятор реально быстрее! Все свои проекты пересобрал, работают на ура.
Но это были проекты не связанные с Qt.

И тут возникла необходимость писать Gui... Причем проекты наши кроссплатформенные. Выбрали Qt 4.3.4 в качестве основы и тут первые проблемы:
Сначала подправил парочку заголовочных файлов с соответсвии с требованиями компилятора: были объявлены дружественные функции а самих прототипов не было - g++ сказал так нельзя:))).

Все вроде пошло, но далее при сборке получил следующее:

Creating library file: c:\qt\lib\libQtGui4.a
./tmp\obj\release_shared\qpaintengine_raster.o:qpaintengine_raster.cpp:(.text+0x17abe): undefined reference to `__imp___ZN6QRctFC1ERK5QRect'
./tmp\obj\release_shared\qpaintengine_raster.o:qpaintengine_raster.cpp:(.text+0x183e0): undefined reference to `__imp___ZN6QRctFC1ERK5QRect'
./tmp\obj\release_shared\qpaintengine_raster.o:qpaintengine_raster.cpp:(.text+0x18536): undefined reference to `__imp___ZN6QRctFC1ERK5QRect'
./tmp\obj\release_shared\qstylesheetstyle.o:qstylesheetstyle.cpp:(.text+0x23f0): undefined reference to `__imp___ZN6QRectFC1EK5QRect'
./tmp\obj\release_shared\qstylesheetstyle.o:qstylesheetstyle.cpp:(.text+0x35da): undefined reference to `__imp___ZN6QRectFC1EK5QRect'
./tmp\obj\release_shared\qstylesheetstyle.o:qstylesheetstyle.cpp:(.text+0x3643): more undefined references to `__imp___ZN6QRetFC1ERK5QRect' follow
collect2: ld returned 1 exit status
make.EXE[2]: *** [..\..\lib\QtGui4.dll] Error 1
make.EXE[2]: Leaving directory `C:/qt/src/gui'
make.EXE[1]: *** [release] Error 2
make.EXE[1]: Leaving directory `C:/qt/src/gui'
make.EXE: *** [sub-gui-make_default-ordered] Error 2

Qt собирал как shared. Помнится было у меня в опыте что-то такое, когда под linux появился gcc4. И связано это было вроде с компиляцией классов в shared library. Может кто поможет? Есть хотя бы спецы по дикорированию имен, что бы определить, каких методов не хвататет?

PS. На gcc 4.1.2 собрал, но там есть парочка очень нехороших багов в компиляторе. 4.3.0 от них избавлен.


Название: Re: Сборка Qt + Mingw 4.3.0
Отправлено: ритт от Апрель 20, 2008, 21:26
Сначала подправил парочку заголовочных файлов с соответсвии с требованиями компилятора: были объявлены дружественные функции а самих прототипов не было - g++ сказал так нельзя:))).
исправлено неверно! там не хидер надо было править, а вининпутконтекст.цпп
в любом случае, по первой проблеме отрапортовано (http://trolltech.com/developer/task-tracker/index_html?id=207114&method=entry), но на данный момент сборка гцц4.х под венду официально не поддерживается

вторая проблема, похоже, связана с альфа-стадией сборки гцц4.3.0 под венду (сейчас мне лениво делать свою сборку чтобы проверить) - потребуется безсмысленная ( :) ) правка qrect.h

ещё несколько проблем при сборке вэбкит (для 4.4+) - недостаточно полно продекларированы итераторы и функции таймера

зы. если это (Сборка Qt + Mingw 4.3.0) не баловство с целью "посмотреть", а реальная потребность, обращайся в личку


Название: Re: Сборка Qt + Mingw 4.3.0
Отправлено: saardukar от Апрель 21, 2008, 07:45
Отпишусь о результатах. При помощи Константина, танцев с бубнами и следущего набора мингв:

gcc-4.2.3-tdm-1-core-1
gcc-4.2.3-tdm-1-g++-1
binutils-2.18.50-20080109-2
mingw-runtime-3.14
mingw32-make-3.81-2
w32api-3.11

пропатчил файл, как писал Константин:

для src/gui/inputmethod/qwininputcontext_win.cpp
ручками вставить extern
bool qt_sendSpontaneousEvent(QObject*, QEvent*); где-нибудь в начале файла (лучше перед дефайнами - как у Троллей)

затем в qrect.h перенеси тело констуктора QRectF(const QRect &r) в саму декларацию (примерно так):
Code:
    inline QRectF(const QRect &r)
        : xp(r.x()), yp(r.y()), w(r.width()), h(r.height())
    {}

после при компиляции получил ошибку похожую на ту, что в src/gui/inputmethod/qwininputcontext_win.cpp, но
в src\corelib\kernel\qeventdispatcher_win.cpp с функцией
LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp);

Пропатчил аналогично добавкой
extern LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp);

после таких "танцев с бубнами" Qt 4.3.4 собрался и функционирует.

Сейчас буду пробывать гцц 4.3.0.



Название: Re: Сборка Qt + Mingw 4.3.0
Отправлено: saardukar от Апрель 21, 2008, 21:46
Под gcc 4.3.0 не собралось. По совокупности всех причин:) откатился на gcc 3.4.5-2. Буду ждать нормально релиза gcc 4.


Название: Re: Сборка Qt + Mingw 4.3.0
Отправлено: ритт от Апрель 22, 2008, 00:55
4.4 собирается и даже работает...но как-то кривовато (например, бинарники падают на ровном месте)
я предупреждал, что с этой сборкой гцц ещё рано баловаться