Escribimos en C / C ++ en Linux bajo KolibriOS

Introducción



KolibriOS es un sistema operativo en miniatura, cuyo núcleo y la mayoría de los programas están escritos en lenguaje ensamblador. Esto, por supuesto, no significa que sea imposible escribir para KolibriOS en otros lenguajes de programación.



Este artículo es una guía para configurar una cadena de herramientas para Linux.



Empecemos



Para hacer esto, necesita descargar:





Cree una carpeta / home / USER / autobuild (donde USER es el nombre de usuario). A continuación, creemos un enlace:



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


Vayamos a / home / autobuild. Cree un árbol de directorios / home / autobuild / tools / win32. Descargue la cadena de herramientas anterior y descomprímala en / home / autobuild / tools / win32. A continuación, descargue el SDK desde FTP y descomprímalo en / home / autobuild / tools / win32 / lib y / home / autobuild / tools / win32 / mingw32 / lib (en dos lugares, porque ambas rutas se usan en archivos MAKE). Ahora viene la parte divertida.



Descarga SVN



Resalta una carpeta. Me referiré a él aquí como / home / USER / KOS_SVN. Ejecutar en la terminal:



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


Debe esperar hasta que se descargue todo el SVN.



Preparándose para la compilación



Para poder utilizar las herramientas, debe registrar la ruta a la carpeta con las herramientas en la variable de entorno "PATH" en el archivo "/ etc / environment".



sudo nano /etc/environment


Y agregue al final del archivo:



:/home/autobuild/tools/win32/bin


También necesita descargar la biblioteca 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


Otro problema conocido:

/home/autobuild/tools/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: error al cargar bibliotecas compartidas: libmpfr.so.4: no se puede abrir el archivo de objeto compartido: No tal archivo o directorio



Corregido por enlace:



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


Compilacion



Los programas de muestra se encuentran en / home / USER / KOS_SVN / contrib / sdk / samples. Tome El Cairo, por ejemplo. Vayamos a la carpeta y digamos make . Si todo tiene éxito, el binario de cairo aparecerá en la carpeta , que se ejecuta en KolibriOS.



Un ejemplo mas



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


El siguiente Makefile funcionará para él (reemplace los espacios con pestañas):



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 tienes algún problema, escribe en los comentarios.




All Articles