Заметки / Простое графическое приложение

GCC, Linux
 Пример оконной программы для Ubuntu на основе библиотеки xlib:

test.c
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h> 
#include <X11/Xlib.h> 

 extern int errno; 
   char msg [256]={"Hello, World!"};
    int sdf; 
    int width, height, tmp;
Display *d; 
 Window w;
     GC gc;
 XEvent e; 

void paint ()
{
 XGetGeometry (d, w, (Window *)&tmp, &tmp, &tmp, &width, &height, &tmp, &tmp); 

 XSetForeground (d, gc, 0);
 XFillRectangle (d, w, gc, 0, 0, width, height);

 XSetForeground (d, gc, 255*256*256+255*256+255);
 XDrawString (d, w, gc, 50, 50, msg, strlen (msg));
}

void main ()
{
 if ((d=XOpenDisplay (getenv ("DISPLAY")))==NULL)
 {
  printf ("Can't connect X server: %s\n", strerror (errno));
  exit (1); 
 } 
 sdf=DefaultScreen (d); 

 w=XCreateSimpleWindow (d, RootWindow (d, sdf),    
                        0, 0, 250, 250, 1, 
                        BlackPixel (d, sdf), WhitePixel (d, sdf));
 XSelectInput (d, w, ExposureMask
                   | KeyPressMask
                   | KeyReleaseMask);
 XMapWindow (d, w);                                 

 // create the Graphics Context
 gc=XCreateGC (d, w, 0, 0);

 while (1)
 {
  XNextEvent (d, &e);

  if (e.type==Expose)
  {
   paint ();
  }

  if (e.type==KeyPress)
  {
   // Esc
   if (e.xkey.keycode==9)
   {
    break;
   }
  }
 }

 XFreeGC (d, gc);
 XDestroyWindow (d, w);
 XCloseDisplay (d);          
 exit (1);	
}

Для того, чтобы скомпилировать данную программу понадобятся следующие действия в консоли...

Обновление списка пакетов:
sudo apt-get update

Инсталляция компилятора GCC:
sudo apt-get install gcc

Установка библиотеки для работы с окнами:
sudo apt-get install libx11-dev

Сборка программы "test.c" в исполняемые файлы "test" и "test_exe", с оконным интерфейсом ("-lX11"). Параметр "-no-pie" позволяет создать исполняемый файл, кликом по которому можно запустить программу. Если скомпилировать программу без него, то приложение можно будет выполнить только из терминала:
gcc test.c -o test_exe -lX11 -no-pie
gcc test.c -o test -lX11

Присваивание атрибута исполняемого файла. После компиляции он будет выставлен автоматически, так что при сборке программы в этой команде нет нужды:
chmod ugo+x test_exe
chmod ugo+x test

Итог:

18.03.2019