Пишем на языке С/C++ в Linux под KolibriOS

от автора

Вступление

KolibriOS – миниатюрная операционная система, ядро и большинство программ которой написано на ассемблере. Это, конечно же, не значит, что на других языках программирования писать для KolibriOS нельзя.

Данная статья — инструкция по настройке toolchain’а для Linux.

Начнем

Для этого нужно скачать:

Создадим папку /home/USER/autobuild (где USER — имя пользователя). Далее создадим ссылку:

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

Перейдем в /home/autobuild. Создадим дерево каталогов /home/autobuild/tools/win32. Скачаем вышеупомянутый toolchain и распакуем в /home/autobuild/tools/win32. Далее скачаем SDK с FTP и распакуем поверх /home/autobuild/tools/win32/lib и /home/autobuild/tools/win32/mingw32/lib (в двух местах — потому что в makefile’ах используется и тот и тот путь). Далее самое интересное.

Скачивание SVN

Выделите одну папку. Я буду называть здесь ее как /home/USER/KOS_SVN. Выполните в терминале:

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

Нужно подождать пока выкачается весь SVN.

Подготовка к компиляции

Чтобы была возможность использовать инструменты, надо прописать путь к папке с инструментами в переменную окружения "PATH" в файле "/etc/environment".

sudo nano /etc/environment

И добавить в конце файла:

:/home/autobuild/tools/win32/bin

Еще нужно скачать библиотеку 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

Еще одна известная проблема:
/home/autobuild/tools/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: error while loading shared libraries: libmpfr.so.4: cannot open shared object file: No such file or directory

Исправляется ссылкой:

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

Компиляция

Примеры программ лежат в /home/USER/KOS_SVN/contrib/sdk/samples. Возьмем к примеру Cairo. Зайдем в папку и скажем make. Если все удачно, в папке появится бинарник cairo, который запускается в KolibriOS.

Еще один пример

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

Для него пойдет такой Makefile (замените пробелы на tab’ы):

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

Если возникли какие-либо проблемы, пишите в комментариях.

ссылка на оригинал статьи https://habr.com/ru/post/527144/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *