نكتب بلغة C / C ++ على Linux تحت KolibriOS

المقدمة



KolibriOS هو نظام تشغيل مصغر ، النواة ومعظم برامجها مكتوبة بلغة التجميع. هذا بالطبع لا يعني أنه من المستحيل الكتابة لـ KolibriOS بلغات برمجة أخرى.



هذه المقالة عبارة عن دليل لإعداد سلسلة أدوات لنظام 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 (في مكانين - لأن كلا المسارين يُستخدمان في ملفات makefiles). الآن يأتي الجزء الممتع.



تنزيل 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 :

حدث خطأ أثناء تحميل المكتبات المشتركة: 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 / sample. خذ القاهرة على سبيل المثال. دعنا نذهب إلى المجلد ونقول Make . إذا نجح كل شيء ، فسيظهر ملف cairo الثنائي في المجلد الذي يعمل في KolibriOS.



مثال آخر



مرحبا ج :



#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