Wir schreiben in C / C ++ unter Linux unter KolibriOS

Einführung



KolibriOS ist ein Miniaturbetriebssystem, dessen Kernel und die meisten Programme in Assemblersprache geschrieben sind. Dies bedeutet natürlich nicht, dass es unmöglich ist, für KolibriOS in anderen Programmiersprachen zu schreiben.



Dieser Artikel ist eine Anleitung zum Einrichten einer Toolchain für Linux.



Lasst uns beginnen



Dazu müssen Sie Folgendes herunterladen:





Erstellen Sie einen Ordner / home / USER / autobuild (wobei USER der Benutzername ist). Als nächstes erstellen wir einen Link:



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


Gehen wir zu / home / autobuild. Erstellen Sie einen Verzeichnisbaum / home / autobuild / tools / win32. Laden Sie die obige Toolchain herunter und entpacken Sie sie in / home / autobuild / tools / win32. Laden Sie als Nächstes das SDK von FTP herunter und entpacken Sie es über / home / autobuild / tools / win32 / lib und / home / autobuild / tools / win32 / mingw32 / lib (an zwei Stellen - da beide Pfade in Makefiles verwendet werden). Jetzt kommt der lustige Teil.



SVN herunterladen



Markieren Sie einen Ordner. Ich werde es hier als / home / USER / KOS_SVN bezeichnen. Im Terminal ausführen:



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


Sie müssen warten, bis der gesamte SVN heruntergeladen wurde.



Vorbereitung für die Kompilierung



Um die Tools verwenden zu können, müssen Sie den Pfad zum Ordner mit den Tools in der Umgebungsvariablen "PATH" in der Datei "/ etc / environment" registrieren.



sudo nano /etc/environment


Und am Ende der Datei hinzufügen:



:/home/autobuild/tools/win32/bin


Sie müssen auch die libisl- Bibliothek herunterladen :



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


Ein weiteres bekanntes Problem:

/home/autobuild/tools/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: Fehler beim Laden gemeinsam genutzter Bibliotheken: libmpfr.so.4: freigegebene Objektdatei kann nicht geöffnet werden: Nein solche Datei oder Verzeichnis



Korrigiert durch Link:



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


Zusammenstellung



Beispielprogramme befinden sich in / home / USER / KOS_SVN / contrib / sdk / samples. Nehmen wir zum Beispiel Kairo. Gehen wir zum Ordner und sagen make . Wenn alles erfolgreich ist, wird die Cairo- Binärdatei in dem Ordner angezeigt, der in KolibriOS ausgeführt wird.



Noch ein Beispiel



hallo.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;
       }
    }
}


Das folgende Makefile funktioniert dafür (ersetzen Sie Leerzeichen durch Tabulatoren):



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 $@ $<


Wenn Sie Probleme haben, schreiben Sie in die Kommentare.




All Articles