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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сборка Qt + Mingw 4.3.0  (Прочитано 4851 раз)
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 от них избавлен.
Записан
ритт
Гость
« Ответ #1 : Апрель 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) не баловство с целью "посмотреть", а реальная потребность, обращайся в личку
Записан
saardukar
Гость
« Ответ #2 : Апрель 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.

Записан
saardukar
Гость
« Ответ #3 : Апрель 21, 2008, 21:46 »

Под gcc 4.3.0 не собралось. По совокупности всех причин:) откатился на gcc 3.4.5-2. Буду ждать нормально релиза gcc 4.
Записан
ритт
Гость
« Ответ #4 : Апрель 22, 2008, 00:55 »

4.4 собирается и даже работает...но как-то кривовато (например, бинарники падают на ровном месте)
я предупреждал, что с этой сборкой гцц ещё рано баловаться
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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