KolibriOSの下でLinux上のC / C ++で記述します

前書き



KolibriOSはミニチュアオペレーティングシステムであり、カーネルとそのほとんどのプログラムはアセンブリ言語で記述されています。もちろん、これは他のプログラミング言語でKolibriOS用に書くことが不可能であることを意味するものではありません。



この記事は、Linux用のツールチェーンを設定するためのガイドです。



はじめましょう



これを行うには、以下をダウンロードする必要があります。





フォルダ/ホーム/ USER /自動ビルドを作成します(ここで、USERはユーザー名です)。次に、リンクを作成しましょう。



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


/ home / autobuildに行きましょう。ディレクトリツリー/ホーム/自動ビルド/ツール/ win32を作成します。上記のツールチェーンをダウンロードして、/ home / autobuild / tools / win32に解凍します。次に、FTPからSDKをダウンロードし、/ home / autobuild / tools / win32 / libおよび/ home / autobuild / tools / win32 / mingw32 / libに解凍します(2つの場所で-両方のパスがmakefileで使用されるため)。今、楽しい部分が来ます。



SVNをダウンロード



1つのフォルダを強調表示します。ここでは、/ home / USER / KOS_SVNと呼びます。ターミナルで実行します。



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


SVN全体がダウンロードされるまで待つ必要があります。



コンパイルの準備



ツールを使用できるようにするには、「/ etc / environment」ファイルの「PATH」環境変数にツールフォルダーへのパスを登録する必要があります。



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:共有ライブラリのロード中にエラーが発生しました:libmpfr.so.4:共有オブジェクトファイルを開くことができません:いいえそのようなファイルまたはディレクトリ



リンクで修正:



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にあります。カイロを例にとってみましょう。フォルダに移動して、makeと言いましょすべてが成功すると、cairoバイナリがKolibriOSで実行されているフォルダ表示されます



もう1つの例



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が機能します(スペースをタブに置き換えます)。



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


問題がある場合は、コメントに書き込んでください。




All Articles