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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.5.2] Сборка с оптимизацией  (Прочитано 5505 раз)
Tonal
Гость
« : Август 11, 2009, 11:58 »

Дошли руки - собрал Qt 4.5.2 на mingw32 gcc 4.4.0
Чтоб релиз работал максимально шустро ключи оптимизации выставил следующие:
Код:
QMAKE_CFLAGS_RELEASE = -O3 -march=pentium3 -mtune=pentium3
Конфигурация:
Код
configure.exe -fast -shared -debug-and-release -exceptions -stl -rtti ^
-plugin-sql-ibase -plugin-sql-mysql -plugin-sql-odbc -plugin-sql-sqlite ^
-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg ^
-webkit ^
-no-openssl -no-phonon -no-qdbus ^
-qt-style-windowsxp -qt-style-windowsvista
 
Всё собралось без ошибок, но работать оно отказалось. Грустный
assistant.exe сразу вылетал.
assistant_adp.exe при попытке перейти по любой ссылке.
Вылет всегда в одном и том же месте QtCode4.dll

Запуск под assistant-а под gdb показал, что грохается в функции inflate_table ((inftrees.c) вызываемой из inflate
(inflate.c). Это библиотека zlib 1.2.3 из каталога qt4/src/3rdparty/zlib.
В gdb место вылета дезасемблируется так:
Код
ASM
movaps %xmm0,-0x38(%ebp)
 

После смены ключа -О3 на -О2 и перекомпиляции QtCode4.dll ассистенты таки запустились.
Но вылеты продолжились в разных местах QtGui4.dll, с похожими в асме местами.

Мне кажется, что лажает кодогенератор gcc, тем более, что похожие баги есть: #2834267
Соответственно написал в рассылку и зарегистрировал багу: #2834786.
Ответили, что нужен минимальный воспроизводимый кусок кода. В замешательстве

Пересобрал zlib с указанными опциями, набросал тестик - не падает...
И вот тут я затупил...
Мож кто придумает как изменить пример или свой напишет?

Можно, конечно написать троллям, но у них пока официально не поддерживается mingw 4.4.0 да и опции оптимизации не стандартные - с большой вероятностью отфудболят. Грустный

П.С. Машины ниже pentium3 пока не интересуют. Улыбающийся
Записан
SABROG
Гость
« Ответ #1 : Август 12, 2009, 21:17 »

Пробовал я тоже включать SSE оптимизацию. Girish мне тут ответил в 2007 году.

Скорее всего дело даже не в версии gcc. Может быть zlib использует вставки асма?
---
Вроде не использует. Значит ключи march=pentium3 -mtune=pentium3 включают MMX/SSE оптимизацию.
« Последнее редактирование: Август 12, 2009, 21:23 от SABROG » Записан
Alex Shabanov
Гость
« Ответ #2 : Август 20, 2009, 12:00 »

попробуй посмотреть здесь - http://biodisplay.tyrell.hu/implementation/software-engineering/a-cross-platfrom-c-development-environment/compiling-qt-435-with-gcc-4-on-windows/

если не поможет - пришли callstack, скорее всего кодогенератор слажал в с++ коде, т.е. в вызывающем функции zlib-а
Записан
Tonal
Гость
« Ответ #3 : Август 20, 2009, 13:58 »

Этот пост совсем не о том - 4.5.2 собирается последним mingw отлично. Улыбающийся
А то что слажал кодогенератор - тоже вроде ясно:
Приведённая инструкция вызывается для адреса варавненного на 8 байт а ожидает выравнивания на 16.
Причём в этом коде не используются операции с плавающей точкой, т.е. инструкция чисто для оптимизации инициализации локальных переменных.

Там в -О3 много грабель с этими инструкциями. Например вот.
Записан
Tonal
Гость
« Ответ #4 : Август 25, 2009, 06:32 »

Написал багрепорт.
Ответ вполне ожидаем:
Цитировать
Using GCC 4.4 is not supported on MinGW by Qt Software Development Frameworks :
http://doc.trolltech.com/4.6-snapshot/supported-platforms.html
Try
   * using GCC 3.4.2
   * using -O2 instead of -O3
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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