IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Linux | Open source  >

Разработка программного обеспечения для телефонов OpenMoko под управлением Linux

Открытая бесплатная платформа для мобильных коммуникаций

developerWorks
На предыдущую страницуСтраница 6 из 13 На предыдущую страницу

Опции документа

Обсудить

Исходные тексты примера


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Минимальное приложение GTK+

Почему именно GTK+

Многие пользователи, уже работавшие с другими встроенными системами, хотят знать, почему нельзя использовать Qt. На самом деле можно, но делать этого не стоит. И GTK+, и Qt обычно собираются как библиотеки общего пользования; это означает, что все приложения GTK+ в вашей системе используют один и тот же экземпляр расположенного в памяти скомпилированного кода GTK+, а се приложения Qt используют один и тот же экземпляр Qt. Все стандартные приложения, предоставляемые с системой, используют GTK+, поэтому, если ваше приложение использует GTK+, оно будет использовать уже загруженный код. В этой среде приложение Qt потребовало бы значительно больше ресурсов. Это можно сравнить с выбором правостороннего или левостороннего движения в различных странах; несмотря на то, что у обоих вариантов есть свои аргументы, главное - чтобы все водители на дороге приняли одинаковые решения.

Минимальная программа GTK+

Я начну с минимальной программы, которая открывает окно и ничего не делает. Вам даже не нужно делать возможность "выхода", поскольку у всех телефонов есть отличный способ закрытия приложений—нажатие кнопки выключения. (На самом деле в эмуляторе это будет не совсем удобно, поскольку драйвер USB- клавиатуры перехватывает события с пробелом.)

Вот наша минимальная программа:


Листинг 3. Минимальная программа GTK
                    
#include <gtk/gtk.h>

int
main(int argc, char *argv[]) {
        GtkWidget *window;

        gtk_init(&argc, &argv);

        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_widget_show(window);

        gtk_main();

        return 0;
}
        

Обновление параметров bitbake

Теперь создание параметров bitbake будет чуть сложнее. Во-первых, нужно указать, что приложение использует GTK+. Это можно сделать, введя строку DEPENDS = "gtk+". Вам также нужно обновить редакцию, потому что в противном случае bitbake не заметит изменений — простое изменение исходного кода не считается! Осталось всего одно изменение - командная строка, которая получается немного длинноватой. Вы не можете просто указать ссылку на libgtk—вам придется включить все директории и каждый используемый пакет в каждой директории. Завершающее правило do_compile() будет выглядеть следующим образом:


Листинг 4. Полная командная строка вызова компилятора
                    
do_compile() {
   ${CC} ${CFLAGS} ${LDFLAGS} -Wl,-O1 -g -o hello ${WORKDIR}/hello.c \
   -I ${STAGING_INCDIR}/pango-1.0 -I ${STAGING_INCDIR}/gtk-2.0 \
   -I ${STAGING_INCDIR}/cairo -I ${STAGING_LIBDIR}/gtk-2.0/include \
   -I ${STAGING_INCDIR}/glib-2.0 -I ${STAGING_INCDIR}/glib-2.0/glib \
   -I ${STAGING_INCDIR}/atk-1.0 -lgtk-x11-2.0
}

На самом деле всё это нужно для включения множества директорий и одной библиотеки. Вам не нужно указывать путь библиотеки; библиотеки GTK+ располагаются на целевом устройстве в папке библиотек по умолчанию (/usr/lib), поэтому умолчание будет отлично работать.

Зачем включать столько директорий?

Для программы, в которую включается только <gtk/gtk.h>, необходимость указания семи дополнительных директорий может показаться лишней. Здесь есть две проблемы. Первая состоит в том, что основной заголовок GTK+ включает несколько других заголовков, которые, в свою очередь, также включают в себя заголовки. Вторая проблема состоит в том, что среда OpenMoko, как и некоторые другие системы, располагает дерево каждого пакета в отдельной вложенной директории, сокращая тем самым вероятность конфликтов. Ссылка <gtk/gtk.h> в этом случае обозначает /usr/include/gtk-2.0/gtk/gtk.h, но если у вас установлено несколько версий GTK+, изменение пути приведет к изменению получаемого заголовка, при этом не нужно обновлять множество исходных файлов.

Снова запуск и тестирование

Снова соберем приложение, используя make openmoko-devel-image. Вы должны увидеть, что приложение hello собрано заново. Теперь, если вы используете эмулятор, скопируйте его на телефон с помощью make flash-qemu-local. Если вы используете телефон, скопируйте файл любым удобным для вас способом. Запустите приложение и получите серый экран, который ничего не делает. Отлично! Задача здесь состояла не в том, чтобы что-то сделать, а в том, чтобы проверить правильность работы компиляции и сборки минимального приложения GTK+. Давайте теперь добавим немного функциональности.


На предыдущую страницуСтраница 6 из 13 На предыдущую страницу
    IBM в России Конфиденциальность Контакты