[ sendai @ 22.03.2010. 20:08 ] @
Pitanje je skroz pocetnicko i znalcima glupo,ali ipak bi molio objasnjenje.
Recimo da napisem neki jednostavan program u C-u, otprilike ovako nesto:
Code:

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp;

    fp = fopen(argv[1], "r");
    printf("%c\n", getc(fp));
    fclose(fp);

    return 0;
}


i kompajliram ga na windowsima u npr. prog.out (ne .exe).
Pitanje je, dakle, hoce li prog.out raditi na UNIX-u i Linux-u ako se uzme samo binarni kod (prog.out) i prebaci sa windowsa na drugi operativni sistem?
Da se razumijemo, znam da ce ovo raditi drugom sistemu ako se uzme source i kompajlira na tom sistemu, dakle hoce li raditi binarni prog.out bez sourca ako se samo on prebaci?
[ maksvel @ 22.03.2010. 20:36 ] @
To zavisi od kompajlera koji se koristi, tj. trebalo bi kod prevesti nekim cross-kompajlerom: http://en.wikipedia.org/wiki/Cross_compiler
[ sendai @ 22.03.2010. 21:12 ] @
Hvala. :)
Pretpostavljam da mi ni jedan cross-compiler ne bi pomogao kad bi koristio neke sistemske pozive, bilo da se kompajliranje odvija na Windowsu, UNIX-u ili Linuxu, jeli tako?

[ maksvel @ 22.03.2010. 21:48 ] @
Kontam da to zavisi od biblioteka koje enkapsuliraju te pozive, odnosno njihovog (ne)postojanja. To je kao koncept Jave: na mašini na koju prebacuješ iskompajliran program mora postojati odgovarajuća "podrška" za program.
[ karas @ 23.03.2010. 06:20 ] @
Pa sad, zavisi sta podrazumevas pod sistemskim pozivima - otvaranje i zatvaranje fajlova su takodje neki sistemski pozivi.;) Ako mislis na poziv nekih funkcija specificnih za Linux API, vrlo verovatno da to nece raditi na drugim sistemima, mada imas pokusaje da se napravi unixoliko okruzenje pod Windowsom (npr. Cygwin). Uzmi npr. wait() koja je slicna pod Linuxom i FreeBSD-om ali opet dovoljno razlicita da bi u kodu koji bi hteo da poteras na obe platforme pisao dupli kod a zatim preko #ifdef proveravao gde ga kompajliras. Mada, ako si se odlucio za C, vrlo verovatno da si spreman za te stvari.:)