Kami menulis dalam C / C ++ di Linux di bawah KolibriOS

pengantar



KolibriOS adalah sistem operasi miniatur, kernel dan sebagian besar programnya ditulis dalam bahasa assembly. Ini, tentu saja, tidak berarti bahwa tidak mungkin untuk menulis KolibriOS dalam bahasa pemrograman lain.



Artikel ini adalah panduan untuk menyiapkan toolchain untuk Linux.



Ayo mulai



Untuk melakukan ini, Anda perlu mengunduh:





Buat folder / home / USER / autobuild (di mana USER adalah nama pengguna). Selanjutnya, mari buat link:



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


Ayo pergi ke / home / autobuild. Buat pohon direktori / home / autobuild / tools / win32. Unduh toolchain di atas dan ekstrak ke / home / autobuild / tools / win32. Selanjutnya, unduh SDK dari FTP dan buka paketnya di / home / autobuild / tools / win32 / lib dan / home / autobuild / tools / win32 / mingw32 / lib (di dua tempat - karena kedua jalur digunakan di makefiles). Sekarang tiba bagian menyenangkan.



Unduh SVN



Sorot satu folder. Saya akan menyebutnya di sini sebagai / home / USER / KOS_SVN. Jalankan di terminal:



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


Anda harus menunggu hingga seluruh SVN diunduh.



Mempersiapkan kompilasi



Untuk dapat menggunakan alat ini, Anda perlu mendaftarkan jalur ke folder dengan alat di variabel lingkungan "PATH" di file "/ etc / environment".



sudo nano /etc/environment


Dan tambahkan di akhir file:



:/home/autobuild/tools/win32/bin


Anda juga perlu mengunduh perpustakaan 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


Masalah lain yang diketahui:

/home/autobuild/tools/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: kesalahan saat memuat pustaka bersama: libmpfr.so.4: tidak dapat membuka file objek bersama: Tidak file atau direktori tersebut



Dikoreksi dengan tautan:



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


Kompilasi



Program sampel berada di / home / USER / KOS_SVN / contrib / sdk / samples. Ambil Kairo sebagai contoh. Ayo pergi ke folder dan katakan make . Jika semuanya berhasil, biner cairo akan muncul di folder , yang berjalan di KolibriOS.



Satu contoh lagi



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 berikut akan berfungsi untuk itu (ganti spasi dengan 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 $@ $<


Jika Anda memiliki masalah, tulis di komentar.




All Articles