[ Назад ] | [ Содержание ] | [ Далее ] |
Итак, для начала нам необходимы следующие вещи: какая-нибудь, похожая на Unix система, работающий и доступный X-сервер, компилятор языка C++, библиотека Xlib. Это самые необходимые компоненты для написания программы. Собственно говоря, C++ на первых порах будет вовсе не обязателен, но в дальнейшем, для написания программ со сложными графическими интерфейсами, лучше прибегнуть к приемам объектно-ориентированного программирования.
Напишем самое простое приложение. Просто подключимся к графическому терминалу, узнаем о нем кое-какие сведения и отключимся. Для этого нам потребуются две функции: XOpenDisplay, XCloseDisplay, а также структура данных Display.
Пример ex000.c:
#include <stdio.h> #include <X11/Xlib.h> int main() { Display *ourDisplay; ourDisplay=XOpenDisplay(NULL); if (ourDisplay==NULL) { printf("Не удалось установить соединение с графическим терминалом.\n"); return 1; }; /* Выводим сведения о графическом терминале */ printf("Установлено соединение с графическим терминалом.\n"); printf(" Номер соединения: %d;\n",ConnectionNumber(ourDisplay)); printf(" Используется протокол версии %d.%d;\n", ProtocolVersion(ourDisplay),ProtocolRevision(ourDisplay)); printf(" Разработчик сервера: %s;\n",ServerVendor(ourDisplay)); printf(" Версия сервера: %d\n",VendorRelease(ourDisplay)); printf(" Строка соединения: [%s];\n",DisplayString(ourDisplay)); printf(" Количество экранов на сервере: %d;\n",ScreenCount(ourDisplay)); printf(" Номер экрана по-умолчанию: %d;\n",DefaultScreen(ourDisplay)); XCloseDisplay(ourDisplay); return 0; }; |
Для GNU/Linux, распространяемого
компанией Red Hat, команду компиляции можно написать следующим образом:
gcc ex000.c -L/usr/X11R6/lib -lX11
В различных реализациях Unix-систем эта команда может выглядеть
иначе, но в общем случае идея команды такова:
Если при компиляции возникают ошибки, то вероятнее всего или у Вас нет библиотеки Xlib, или сама библиотека находятся в другом месте, или файлы заголовков находятся в каталоге вне дерева стандартного подключения заголовков. Также, возможно, что вы перепутали компилятор и решили скомпилировать программу компилятором паскаля.
Наиболее принятая конфигурация каталогов такова:
Поскольку фирмы, занимающиеся компоновкой юникс систем не выработали общих правил формирования дерева каталогов, часто возникают проблемы при компиляции программ. К примеру, системы использующие сервер XFree86 обычно используют каталог /usr/X11R6 как каталог системы X-Window, а коммерческие юниксы используют каталог /usr/X11. Также есть экзотический вариант расположения в каталоге /opt/X/bin/X11. Самый простой выход для пользователя в этом случае сделать линки с альтернативными названием каталога, чтобы не копаться в скриптах или пакетных файлах компиляции. Впрочем, уже много программных продуктов, выпущенных в последнее время на этапе подготовки к компиляции настраиваются на ту иерархию каталогов, которая существует на машине пользователя. Последнее ложится на плечи разработчиков программного обеспечения. Поскольку мы хотим к ним относиться, то придётся в одной из глав уделить этому внимание.
Итак, предположим программа удачно скомпилировалась. Если она удачно запустилась и выдала всю необходимую информацию, то значит у нас все правильно настроено. Если не запустилась, необходимо разобраться в чём дело.
Во-первых, для запуска программы нам необходимо иметь доступ к работающему X-серверу. Если доступ к серверу отсутствует (Xlib сообщит об этом), то на нем необходимо открыть доступ. Самый простой способ - через команду xhost:
coral:~> xhost host.domain
где host.domain - адрес машины, на которой запускается приложение.
Во-вторых у нас должна быть на него
ссылка. Она хранится в переменной окружения DISPLAY. Формат ссылки таков:
<host name>:<screen number>. По-идее
эта переменная должна устанавливается автоматически, но вполне может быть,
что этого не будет происходить. Вручную эта переменная
устанавливается следующим образом:
coral:~> export DISPLAY=myhost.mydomain:0или просто
coral:~> DISPLAY=myhost.mydomain:0
где myhost.mydomain - адрес машины, на которой запущен X-сервер, а coral в нашем случае это машина, на которой будет работать приложение.
[ Назад ] | [ Содержание ] | [ Далее ] |