Czyli muszę jeszcze raz napisać bibliotekę boost
Ale po co od razu portować to wszystko?
Wystarczy zaimplementować podstawowe funkcje z języka C, takie jak printf
oraz inne pomniejsze, nie od razu cały zbiór bibilotek Boost.
A te np boost musiałbym pisać w kernelu czy jak żeby program działał
Nielogiczność na poziome składni tego zdania: skąd się wziął nagle jakiś "program"?
Jeżeli poprzez ten "program" rozumiesz swój kernel, to tak - musisz wszystko mieć zaimplementowane w kernelu.
Ja myślałem że w programie jest wszystko co potrzeba by działał na każdym systemie i tylko problemy pojawiały się gdy używaliśmy WinAPI a program miał działaś jeszcze np na Linuksie
Em, no technicznie tak.
W rzeczywistości wygląda to tak, że: mamy np.dwa kompilatory GCC: jeden na Windowsa, a drugi na Linuksa.
Każdy z nich ma własną definicję funkcji printf
:
int printf(const char* format, ...)
{
console_put_text(...); // przyjmijmy, że tak nazywa się funkcja WinAPI
}
int printf(const char* format, ...)
{
/* (...) */
do_interrupt(0x80); // przyjmijmy, że w Linuxie za wyświetlanie tekstu służy przerwanie 80h.
}
Więc taki kod:
#include <stdio.h>
int main()
{
printf("asdf");
}
Jest technicznie przenośny między systemami (bo korzysta z przenośnej funkcji printf
), o ile istnieje kompilator na dany system (bo - jak już wspomniałem - dla Ciebie ten kod wygląda identycznie, ale od środka wygląda zupełnie inaczej na różnych systemach, bo każdy system zaimplementowany jest w różny sposób i korzysta z różnych rozwiązań/nazw wewnętrznych/etc/etc).
Ty, jeżeli tworzysz swój własny system, nie masz do dyspozycji tych funkcji i musisz je ręcznie napisać.