воскресенье, 28 марта 2010 г.

Сборка Qt Creator под ICC

Порядка трех недель назад я попробовал откомпилировать Qt Creator 1.3.1 под Ubuntu под ICC, чтобы просто посмотреть, будет ли он работать быстрее, чем тот, что можно скачать с оффсайта. Надо сказать, что следуя простой инструкции, приведенной ниже, все собирается на ура.

$ qmake qtcreator.pro
$ make

Ради интереса, я попробовал так же скомпилировать его и под Windows. Вот что выдал линкер:

    link /LIBPATH:"d:\Qt\4.6.2-ICC\lib" /NOLOGO /DLL /OUT:..\..\..\lib\qtcreator\plugins\Nokia\Debugger.dll @C:\DOCUME~1\alex\LOCALS~1\Temp\nmB5.tmp

   Creating library ..\..\..\lib\qtcreator\plugins\Nokia\Debugger.lib and object ..\..\..\lib\qtcreator\plugins\Nokia\Debugger.exp

sharedlibraryinjector.obj : error LNK2019: unresolved external symbol __imp__LookupPrivilegeValueW@12 referenced in function "private: bool __thiscall Debugger::Internal::SharedLibraryInjector::escalatePrivileges(class QString *)" (?escalatePrivileges@SharedLibraryInjector@Internal@Debugger@@AAE_NPAVQString@@@Z)

sharedlibraryinjector.obj : error LNK2019: unresolved external symbol __imp__OpenProcessToken@12 referenced in function "private: bool __thiscall Debugger::Internal::SharedLibraryInjector::escalatePrivileges(class QString *)" (?escalatePrivileges@SharedLibraryInjector@Internal@Debugger@@AAE_NPAVQString@@@Z)

sharedlibraryinjector.obj : error LNK2019: unresolved external symbol __imp__AdjustTokenPrivileges@24 referenced in function "private: bool __thiscall Debugger::Internal::SharedLibraryInjector::escalatePrivileges(class QString *)" (?escalatePrivileges@SharedLibraryInjector@Internal@Debugger@@AAE_NPAVQString@@@Z)

..\..\..\lib\qtcreator\plugins\Nokia\Debugger.dll : fatal error LNK1120: 3 unresolved externals

 

Ну, не больно-то и хотелось- код, который генерит MSVC, и так хорошо оптимизирован, чего еще надо.

Получается, что на Ubuntu я пока не могу перейти на Qt Creator, построенный с ICC. Затык по-прежнему в компиляции самой Qt. Я обновил пост про Qt, в котором написал, как ее собирать с ICC, какие проблемы при этом возникли. Я туда добавил фрагмент файла, который ICC не переваривает. Как дойдут руки, посмотрю, как заставить его компиляться.

Кстати, под Windows Qt с ICC собралась замечательно. Однако, тут сам Qt Creator не хочет линковаться...

суббота, 20 марта 2010 г.

Сборка Qt под ICC на Ubuntu - продолжение

Вот тут я уже писал, как собирать Qt под ICC. Однако для работы Qt Creator нужна дллька qwebview.dll (libqwebview.so), которая собирается вместе с WebKit. Я, конечно, в оригинальном конфиге никаких QtScript и WebKit не разрешал, однако для Креатора таки придется. Правильно будет вот так:

$ ./configure -opensource -release -platform linux-icc -qt-sql-sqlite -plugin-sql-sqlite -webkit -nomake examples -nomake demos -no-qt3support -no-opengl -no-phonon -no-phonon-backend

При сборке под Windows все хорошо- ICC собирает все подряд без ошибок, а вот под Ubuntu возникает проблема. Полностью она изложена в QTBUG-9172 и в WebKit Bug 36422, вкратце- вот что выдается компилятором ICC:

../JavaScriptCore/jit/JITStubs.cpp(108): error: expected an identifier

asm volatile (

^

UPD: Файл, на котором компилятор ломается, находится в src\3rdparty\webkit\JavaScriptCore\jit\. А вот кусок кода, который не может быть разобран:

#if COMPILER(GCC) && PLATFORM(X86)

...

asm volatile (

Практически это означает, что Qt Creator, даже если его и собрать под ICC, работать не будет, потому что нет нужных длл. Не знаю, может быть, ICC умеет делать такой же name mangling, как и GCC. Если это так, то возможно будет использование длллек прямо из Qt SDK. Однако, как этого добиться от ICC, я не знаю. В доках по ICC есть некоторая инфа по совмести с G++, буду смотреть.

UPD: WebKit Bug 36422 подтвержден Kent Hansen.
UPD2: WebKit Bug 36422 пофиксен и закрыт Oliver Goffart.

суббота, 13 марта 2010 г.

Qt Creator 1.3.81 и Qt 4.7.0 Technical Preview

На днях тролли выпустили первую альфу новых Qt Creator и собственно библиотеки Qt. Скачать можно здесь. Инструкции по сборке и установке здесь.

Из нового в Qt Creator 2.0 (или 1.3.81 пока что):
  • Поддержка Qt Quick (Quick Designer)
  • Новый формат файла проекта QML-приложений
  • Продвинутый редактор QML / JavaScript
  • Отладка QML
Также обновилось руководство по Qt Creator.

воскресенье, 7 марта 2010 г.

Сборка Qt под ICC на Ubuntu

Пишут, что ICC генериует более быстрый код, чем GCC. Я процессорами AMD не пользуюсь, вот и решил попробовать, будет ли Qt Creator работать быстрее, если его собрать под ICC.
Установка ICC на Ubuntu описана здесь. Поскольку Qt Creator будет использовать длльки Qt, то нам придется пересобрать саму Qt под ICC из исходников. Я скачал Qt 4.6.2 для Linux.
Для успешной компиляции необходимо изменить конфигурацию. Во-первых, надо сменить платформу на linux-icc. Во-вторых, у меня отказались собираться webkit и qtscript, которые я все равно не использую. Быстрое гугление проблему не решило, и на них я забил. Вопреки разным советам, ничего менять в директории mkspec не надо. Также, не надо трогать и QMAKE_CFLAGS_RELEASE.
После распаковки надо указать путь к библиотеке в переменной PATH:
$ PATH=/home/qt-everywhere-opensource-src-4.6.2/bin:$PATH
$ export PATH
Также, надо установить libxext-dev:
$ sudo apt-get install libxext-dev
В директории с распакованной Qt, выполняем
$ ./configure -platform linux-icc -nomake examples -nomake demos -qt-sql-sqlite -no-qt3support -no-opengl -no-dbus -no-phonon -no-phonon-backend -no-webkit -no-script
Затем делаем
$ make
Make несколько раз вылетал с внутренней ошибкой ICC, но в итоге все собралось.