Fehler beim compilieren
-
Hallo,
mein Projekt besteht aus mehreren Dateien.
compiliert wird über make (gleiches makefile benutze ich bei all meinen Projekten)works@works-desktop:~/projekte/zusatz/rk3964$ make
gcc -g -W -Wall -ansi -MM main.c -MT main.o > main.dep
gcc -g -W -Wall -ansi -c main.c -o main.o
main.c: In Funktion »main«:
main.c:177: Warnung: implizite Deklaration der Funktion »usleep«
gcc -g -W -Wall -ansi -o ./rk3964 format.o main.o readconfig.o shmem.o t3964.o -lm
readconfig.o: In function `lesen_config':/home/works/projekte/zusatz/rk3964/readconfig.c:33: multiple definition of `maxbyte_E'
main.o:/home/works/projekte/zusatz/rk3964/main.c:54: first defined here
readconfig.o: In function `lesen_config':/home/works/projekte/zusatz/rk3964/readconfig.c:33: multiple definition of `maxbyte_A'
main.o:/home/works/projekte/zusatz/rk3964/main.c:54: first defined here
readconfig.o: In function `lesen_config':/home/works/projekte/zusatz/rk3964/readconfig.c:33: multiple definition of `maxbyte_M'
main.o:/home/works/projekte/zusatz/rk3964/main.c:54: first defined here
readconfig.o: In function `lesen_config':/home/works/projekte/zusatz/rk3964/readconfig.c:38: multiple definition of `datenpunktliste'
main.o:/home/works/projekte/zusatz/rk3964/main.c:54: first defined here
readconfig.o: In function `lesen_config':/home/works/projekte/zusatz/rk3964/readconfig.c:70: multiple definition of `max_adresse_mpi'
main.o:/home/works/projekte/zusatz/rk3964/main.c:110: first defined hereMeine Frage: laut Meldung sollte die Variable z.B. maxbyte_A als erstes in der main.c an Zeile 54 definiert sein. Jedoch wird die Variable an der angegebenen Stelle nicht benutzt. (auch nicht die anderen Variablen)
Wie kann ich es anstellen das main und readconfig gleiche variablen benutzen können. Vielleicht über eine globalvar.h oder ähnlich ??Ich bin mir nicht ganz klar ob ich die Fehlermeldung richtig interpretiere ?
Liegt es vielleicht an der Reihenfolge der Compilieruing ?Danke
worst_case
-
Deklariere die Variable als extern und leg sie einmal an.
// zB im Header extern int foo; // in _einer_ Code Datei int foo;
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Abend,
danke für die schnelle Antwort.
Du meinst also ich soll eine neue header schreiben und die variablen als extern deklarieren.
Danach in jeder Code-Datei die die Variablen benutzt einfach normal deklarieren ?
Wenn ja... dann lokal oder global ?Danke
worst_case
-
Wenn Du die Variable "normal deklarierst", deklarierst Du sie nicht, sondern definierst sie. Du sagst dem Compiler "hier existiert die Variable foo". Mit der Deklaration (mittels extern) sagst Du ihm nur "es gibt irgendwo eine Variable foo". Wenn Du sie also in jeder Quelldatei definierst, existiert sie mehrmals. Das führt zu dem o.g. Fehler.
Also, deklarieren (mit extern) musst Du sie überall, am besten über einen Header den Du überall einbindest. Definieren darfst Du sie nur in einer Quelldatei.
Lokale Variablen sind das, was der Name andeutet: Sie existieren nur lokal, in ihrem umgebenden Scope. Das disqualifiziert lokale Variablen irgendwie für Deklarationen via extern
-
ask Dr. Alznauer .......
-
vielen Dank,
so ist es gut verständlich.
worst_case