#include <stdio.h>
int main (int argc, char *argv[]) {
printf ("Hello world\n");
return (0);
}
We kunnen hier een programma van maken met behulp van de C
compiler. Die zorgt er dan voor dat deze door mensen leesbare tekst
omgezet wordt in computer instructies die met een redelijk grote
efficientie uit gevoerd kunnen worden. Het commando daar voor is
"cc -o hello hello.c". Hierna hebben we een programma
dat we kunnen draaien.
Eigenlijk pakken we hier zelfs 2 stappen samen. Wat we
eigenlijk doen met deze opdracht is het compileren van
"hello.c tot een objectfile. Daarna gebruiken we de
link editor ld om de initialisatie code, de libaries en
onze code aan elkaar te plakken tot een programma.
printf in die tekst naar het scherm schrijven.
Een groot aantal libries worden echter niet automatisch mee gelinkt. Als je gebruik van die libries wilt maken dan moet je dat expleciet opgeven. Het gaat daarbij bij voorbeeld om libaries die iets doen met X zoals libX11. Je kunt deze extra libries mee linken tijdens de link slag.
In de eerste slag van de compilatie word de pre processing gedaan. Dat wil zeggen dat de 'c' files samengevoegt worden met de header files en eventueele extra defines. Daarna worden de defines ingevult en de macros geexpandeerd.
In dit stadium wordt vaak de selectie gemaakt welk stuk code tussen de diverse #ifdef doorlopen worden. Een voorbeeld hiervan is:
#ifdef LINUX
printf ("Yep it's linux\n");
#else
printf ("Nop it's some stupid OS\n");
#endif
Als nu ergens in de header files (of op de commandline met
-DLINUX) linux gedefineerd wordt dan zal deze code braaf
"Yep it's linux" printen. Op deze manier wordt vaak os
depend code effient opgelost want de overige code wordt gewoon
genegeerd.
De archive libries zijn libries waar alle functies in zitten die vervolgens tijdens het linken naar het programma gecopieerd worden. Hierdoor wordt het programma aanzienlijk groter (zowel op disk als tijdens het draaien). Het heeft echter als voordeel dat het programma niet afhankelijk is van de aanwezigheid van correcte shared libries.
# gcc -O -c Xexit.c # gcc -o Xexit Xexit.o -L/usr/X11R6/lib -lXt -lXaw -lX11Uiteraard is het mogenlijk om eerst meerdere c files te compileren en dan op de link regel ook meerdere object files aan elkaar te linken.