====== Компиляция Qt-приложения под Angstrom-linux (OpenEmbedded) ====== //Еще один способ описан здесь: [[http://hiteg.blogspot.com/2009/03/porting-qtembedded-443-to-s3c2440.html]]// ===== Требуемые утилиты ===== * архив qt-embedded-linux-opensource-src-4.4.3.tar.gz * собранный Angstrom, а именно компиляторы: arm-angstrom-linux-gnueabi-gcc, arm-angstrom-linux-gnueabi-g++ и т.п. ===== Qt 4.8.1 ===== /home/maxx/cardio/qt-everywhere-opensource-src-4.8.1/configure -prefix /opt/qte4.8.1 -embedded arm -platform qws/linux-x86-g++ -xplatform qws/linux-arm-gnueabi-g++ -depths 16,24,32 -no-mmx -no-3dnow -no-sse -no-sse2 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle -fast -qt-mouse-tslib -nomake demos -nomake examples -no-svg -no-phonon -no-qt3support -no-svg -qt-gfx-linuxfb -no-javascript-jit -confirm-license -opensource -no-webkit ===== Компиляция Qt под ARM-архитектуру ===== 1. Добавим в переменные окружения путь к компилятору от Angstrom-linux: export PATH=path_to_bin_where/arm-angstrom-gcc:$PATH Например: export PATH=/stuff/tmp/cross/bin:$PATH 2. Распаковываем архив qt-everywhere-opensource-src-4.7.2.tar.gz и заходим в директорию 3. Выполняем configure с необходимыми параметрами: $ ./configure -embedded arm-gnueabi -no-armfpa -little-endian -qt-gfx-transformed -qt-gfx-linuxfb -nomake demos -nomake examples -no-svg -no-phonon -no-qt3support -no-svg Также можно выбрать в каком виде будет собираться библиотека: статическом или динамически-линкуемой. Соответственно, к строке конфигурации добавляют параметры "-static" или "-shared" //Соглашаемся с лицензией, набирая "yes"// 4. Запускаем компиляцию, которая может длиться до нескольких часов в зависимости от производительности компьютера make 5. Устанавливаем собранную библиотеку в дерево Linux: sudo make install и теперь должна появиться директория /usr/local/Trolltech/ ===== Компиляция приложений Qt под ARM Angstrom-linux ===== //Примечание: для удобства и скорости желательно сначала отладить приложение на х86-компьютере// 1. Создаем Makefile /usr/local/Trolltech/QtEmbedded-4.4.3-arm/bin/qmake Your_Application.pro 2. Если в переменных окружения не прописан путь к компилятору от Angstrom-linux (arm-angstrom-linux-gnueabi-gcc, arm-angstrom-linux-gnueabi-g++), то прописываем его: export PATH=path_to_bin_where/arm-angstrom-gcc:$PATH 3. Запускаем компиляцию: make ===== Запуск Qt-приложения под Angstrom-linux ===== 1. В работающем Angstrom-linux необходимо установить библиотеку для поддержки C++: ipkg install libstdc++6_4.1.2-r4_armv5te.ipk //libstdc++6_4.1.2-r4_armv5te.ipk находится здесь: "/stuff/tmp/deploy/glibc/ipk/armv5te/", если вы собирали Ангстром в "/stuff"// 2. Скопировать в папку с вашей программой so-библиотеки Qt из папки: /usr/local/Trolltech/QtEmbedded-4.4.3-arm/lib Например, могут понадобится: libQtCore.so.4 libQtGui.so.4 libQtNetwork.so.4 3. Создать директорию для шрифтов на целевой платформе с тем же именем, что и на х86-Linux: /usr/local/Trolltech/QtEmbedded-4.4.3-arm/lib/fonts 4. Скопировать в новую директорию шрифты, используемые в приложении 5. Запустить программу на целевой платформе LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. ./YourApplication -qws ===== Удаление курсора мыши из Qt-приложения ===== Чтобы убрать курсор мыши (например, когда используется touchscreen) из приложений QT, необходимо при компиляции библиотеки QT определить переменную **-DQT_NO_CURSOR** и собрать ее. Стоит учесть, что при такой конфигурации ни одно из приложений не будет содержать курсор. Кроме того, Примеры приложений (samples) будут компилироваться с ошибками, т.к. они используют курсор. Также можно при компиляции библиотеки указать переменную "-no-feature-CURSOR" ===== Сжатие исполняемого файла приложения QT для уменьшения размера ===== При создании исполняемого файла со статической линковкой библиотек, размер файла получается огромным, даже после использования утилиты strip. Если на x86 архитектуре это не сильно заметно, то на встраиваемых платформах ARM это сильно замедляет запуск приложений, т.к. необходимо считать с медленного флеш-накопителя 10 мегабайт или более. Мы решили эту проблему с помощью утилиты uclx, сжимающей исполняемые файлы для ARM архитектуры. Исходный код утилиты создан Cecchinel Stephan в 2003г, который мы обновили до современных архитектур. //Примечание: данная утилита компилируется и для x86 процессоров, но не тестированно// Для компиляции утилиты потребуется:\\ 1) Компилятор для архитектуры ARM, например CodeSourcery arm-2008q1 arm-none-linux-gnueabi\\ 2) Библиотека ucl-1.03\\ Библиотеку скачивают отсюда: [[http://www.oberhumer.com/opensource/ucl/download/]]\\ 3) Исходники uclx скачивают отсюда: [[http://www.mentorel.com/downloads/uclx-src.tgz]] Процедура сборки утилиты:\\ 1) Прописываем путь к компилятору ARM:\\ export PATH=~/arm-2008q1/bin:$PATH 2) Распаковываем библиотеку ucl-1.03 и конфигурируем её:\\ ./configure --host=arm-none-linux-gnueabi --prefix=/some_place make && make install 3) Распаковываем исходники uclx и настраиваем Makefile:\\ Устанавливаем переменную CFLAGS, чтобы флаг -I указывал на prefix, что был использован для библиотеки ucl-1.03. То же самое делают для переменной LIBS.\\ Далее выполняют команду make и, если всё настроено верно, то вы получаете исполняемый файл утилиты uclx, который необходимо запускать на конечной платформе ARM. Время работы утилиты сильно зависит от скорости процессора и памяти. ===== Компрессор для исполняемых файлов ===== Еще один хорошо развивающийся компрессор для исполняемых файлов: [[http://upx.sourceforge.net]]