Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : getrenntes kompilieren mit C, nur wie ?



doomcalyptica
11-10-2004, 13:46
hallo,

mal angenommen ich habe mir 3 datetein erstellt (a.c, b.c .c.c) in jeder steht source drinn. in b.c und c.c sollen funktionen drinn sein und a.c ist eben nur die main funktion drinn, die die funktionen von b.c und c.c aufrufen

a.c


#include <stdio.h>
#include "b.c"
#include "c.c"

int main()
{
b();
c();
return 0;
}

b.c


void b()
{
printf("programm B\n");
}

c.c


void c()
{
printf("programm C\n");
}


wenn ich das alles kompilieren möchte, mit meinem gebauten script:


gcc -c a.c #-c parameter zum kompilieren
gcc -c b.c
gcc -c c.c
gcc a.o b.o c.o #linken zu einer zusammenhängenden ausführbaren datei (a.out)

(unter der linux bash GNU bash, version 2.05b.0(1)-release
(i486-slackware-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.)

leioder verursacht a.c aber schon einen fehler:


In file included from a.c:1:
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:37:23: features.h: No such file or directory
In file included from /usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:43,
from a.c:1:
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stddef.h:213: syntax error before "typedef"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:45:25: bits/types.h: No such file or directory
In file included from a.c:1:
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:55: syntax error before "typedef"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:71: syntax error before "typedef"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:81:19: libio.h: No such file or directory
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:97: syntax error before "typedef"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:147:28: bits/stdio_lim.h: No such file or directory
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:151: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:161: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:161: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:163: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:167: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:170: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:170: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:180: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:207: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:209: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:209: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:211: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:225: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:228: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:229: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:233: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:280: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:283: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:283: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:288: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:302: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:304: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:305: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:307: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:310: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:314: syntax error before "_G_va_list"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:316: syntax error before "_G_va_list"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:320: syntax error before "_G_va_list"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:358: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:360: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:361: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:363: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:366: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:388: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:390: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:390: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:391: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:394: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:413: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:415: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:415: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:416: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:419: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:447: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:449: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:450: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:454: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:484: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:486: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:487: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:490: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:494: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:499: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:502: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:520: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:522: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:522: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:524: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:526: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:553: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:556: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:556: syntax error before "fpos_t"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:559: syntax error before '*' token
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:582: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:584: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:584: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:586: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:588: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:599: syntax error before "__BEGIN_NAMESPACE_STD"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:601: syntax error before "extern"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:601: syntax error before "__THROW"
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:608:30: bits/sys_errlist.h: No such file or directory
/usr/lib/gcc-lib/i486-slackware-linux/3.2.3/include/stdio.h:686: syntax error before "__END_DECLS"
In file included from a.c:2:
b.c:1: syntax error before "void"


b.c und c.c lassen sich super complilieren nur leider meine a.c nicht, kann mir jemand helfen. was mache ich falsch

:confused:

deki
11-10-2004, 15:55
In deiner a.c darfst du b.c und c.c nicht einbinden.
Du musst dem Kompiler nur mitteilen, dass es die Funktionen woanders gibt.
stdio.h musst du nicht einbinden, da in main() davon keine Funktionen verwendet werden.
Die a.c würde dann so aussehen:


extern void b();
extern void c();

int main ()
{
b();
c();
return 0;
}


Und deine Funktionen aus b.c und c.c kennen die Funktionen (printf()) aus stdio.h nicht.
Also musst du dort diesen Header einbinden.