Nous écrivons en C / C ++ sous Linux sous KolibriOS

introduction



KolibriOS est un système d'exploitation miniature, dont le noyau et la plupart des programmes sont écrits en langage d'assemblage. Ceci, bien sûr, ne signifie pas qu'il est impossible d'écrire pour KolibriOS dans d'autres langages de programmation.



Cet article est un guide pour configurer une chaîne d'outils pour Linux.



Commençons



Pour ce faire, vous devez télécharger:





Créez un dossier / home / USER / autobuild (où USER est le nom d'utilisateur). Ensuite, créons un lien:



sudo ln -s /home/USER/autobuild /home/autobuild


Allons à / home / autobuild. Créez une arborescence de répertoires / home / autobuild / tools / win32. Téléchargez la chaîne d'outils ci-dessus et décompressez-la dans / home / autobuild / tools / win32. Ensuite, téléchargez le SDK depuis FTP et décompressez-le sur / home / autobuild / tools / win32 / lib et / home / autobuild / tools / win32 / mingw32 / lib (à deux endroits - car les deux chemins sont utilisés dans les makefiles). Vient maintenant la partie amusante.



Télécharger SVN



Mettez en surbrillance un dossier. Je l'appellerai ici / home / USER / KOS_SVN. Exécutez dans le terminal:



cd /home/USER/KOS_SVN
svn co svn://kolibrios.org


Vous devez attendre que tout le SVN soit téléchargé.



Préparation de la compilation



Pour pouvoir utiliser les outils, vous devez enregistrer le chemin d'accès au dossier avec les outils dans la variable d'environnement "PATH" dans le fichier "/ etc / environment".



sudo nano /etc/environment


Et ajoutez à la fin du fichier:



:/home/autobuild/tools/win32/bin


Vous devez également télécharger la bibliothèque libisl :



wget http://board.kolibrios.org/download/file.php?id=8301libisl.so.10.2.2.7z && 7z x file.php?id=8301libisl.so.10.2.2.7z

sudo mv libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu && sudo ln -s /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu/libisl.so.10

sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10 && sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2


Un autre problème connu:

/home/autobuild/tools/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: erreur lors du chargement des bibliothèques partagées: libmpfr.so.4: impossible d'ouvrir le fichier objet partagé: Non tel fichier ou répertoire



Corrigé par lien:



sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4


Compilation



Les exemples de programmes se trouvent dans / home / USER / KOS_SVN / contrib / sdk / samples. Prenons le Caire par exemple. Allons dans le dossier et disons make . Si tout réussit, le binaire cairo apparaîtra dans le dossier , qui s'exécute dans KolibriOS.



Encore un exemple



bonjour.c :



#include <kos32sys.h>

char* title = "Window";

void _draw_window(){
    BeginDraw();
    DrawWindow(100,100,400,200,title,0x80ffffff,0x13);
    EndDraw();
}

int main()
{
    _draw_window();
    for (;;)
    {
       switch(get_os_event())
       {
          case 1:
             _draw_window();
             continue;
          case 2:
             // key pressed, read it and ignore
             get_key();
             continue;
          case 3:
             // button pressed; we have only one button, close
             if(get_os_button() == 1) return 0;
             continue;
       }
    }
}


Le Makefile suivant fonctionnera pour cela (remplacez les espaces par des tabulations):



CC = kos32-gcc
LD = kos32-ld 

SDK_DIR:= /home/USER/KOS_SVN/contrib/sdk

LDFLAGS = -static -S -nostdlib -T $(SDK_DIR)/sources/newlib/app.lds --image-base 0

CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32

INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib

SOURCES = hello.c   \
      $(NULL)

OBJECTS =  $(patsubst %.c, %.o, $(SOURCES))

default: hello.kex

hello.kex: $(OBJECTS) Makefile
    $(LD) $(LDFLAGS) $(LIBPATH) --subsystem native -o hello.kex $(OBJECTS) -lgcc -lc.dll
    objcopy hello.kex -O binary

%.o : %.c Makefile $(SOURCES)
    $(CC) $(CFLAGS) $(INCLUDES) -o $@ $<


Si vous avez des problèmes, écrivez dans les commentaires.




All Articles