Escrevemos em C / C ++ no Linux no KolibriOS

Introdução



KolibriOS é um sistema operacional em miniatura, com o kernel e a maioria dos programas escritos em linguagem assembly. Isso, é claro, não significa que seja impossível escrever para o KolibriOS em outras linguagens de programação.



Este artigo é um guia para configurar um conjunto de ferramentas para Linux.



Vamos começar



Para fazer isso, você precisa fazer o download:



  • Conjunto de ferramentas (compilador)
  • FTP SDK (bibliotecas)
  • SDK com SVN


Crie uma pasta / home / USER / autobuild (onde USER é o nome de usuário). A seguir, vamos criar um link:



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


Vamos para / home / autobuild. Crie uma árvore de diretório / home / autobuild / tools / win32. Baixe o conjunto de ferramentas acima e descompacte-o em / home / autobuild / tools / win32. Em seguida, baixe o SDK do FTP e descompacte-o em / home / autobuild / tools / win32 / lib e / home / autobuild / tools / win32 / mingw32 / lib (em dois lugares - porque ambos os caminhos são usados ​​em makefiles). Agora vem a parte divertida.



Baixar SVN



Selecione uma pasta. Vou me referir a ele aqui como / home / USER / KOS_SVN. Execute no terminal:



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


Você precisa esperar até que todo o SVN seja baixado.



Preparando para compilação



Para poder usar as ferramentas, você precisa registrar o caminho para a pasta de ferramentas na variável de ambiente "PATH" no arquivo "/ etc / environment".



sudo nano /etc/environment


E adicione no final do arquivo:



:/home/autobuild/tools/win32/bin


Você também precisa baixar a 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


Outro problema conhecido:

/home/autobuild/tools/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: erro ao carregar bibliotecas compartilhadas: libmpfr.so.4: não é possível abrir o arquivo de objeto compartilhado: Não tal arquivo ou diretório



Corrigido pelo link:



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


Compilação



Os programas de amostra estão localizados em / home / USER / KOS_SVN / contrib / sdk / samples. Veja Cairo, por exemplo. Vamos para a pasta e dizer make . Se tudo der certo , o binário cairo aparecerá na pasta , que roda no KolibriOS.



Mais um exemplo



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


O seguinte Makefile funcionará para ele (substitua os espaços por tabulações):



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


Se você tiver algum problema, escreva nos comentários.




All Articles