Problem mit Linker
-
Hallo,
ich hab das erste mal versucht mein in Visual Studio entworfenes Projekt auch unter Linux zu compilieren.
Habe dazu auch ein Makefile erstellt und wenn ich jetzt beginne das zu compilieren, dann bekomm ich folgenden Fehler:
/usr/lib/gcc/i486-linux-gnu/4.1.3/../../../../lib/crt1.o: In function
_start': (.text+0x18): undefined reference to
main'
collect2: ld returned 1 exit statuscc = gcc cflags = -ansi -Wall -pedantic -DLINUX # objects = error.o tbgrp.o .c.$(s): $(cc) $(cflags) $< error.o: error.c error.h $(cc) $(cflags) $< tbgrp.o: tbgrp.c tbgrp.h $(cc) $(cflags) $< team-builder: $(objects) $(cc) $(objects) -o team-builder
so sieht mein makefile aus. hab ich da irgendwas falsch gemacht? kann jemand einen fehler erkennen?
-
Hi,
wenn Du das "team-builder" target vor den beiden Object-targets nimmst, das seltsame ".c.$(s)" Target entfernst und bei den "cflags" vor dem Kommentar noch "-c" für nur kompilieren angibst sollte es gehen.
-
jetzt compiliert er mir die .o objekte aber dann hab ich den gleichen Fehler.
Makefile
cc = gcc cflags = -ansi -Wall -pedantic -c -DLINUX # objects = error.o tbgrp.o team-builder: $(objects) $(cc) $(objects) -o team-builder error.o: error.c error.h $(cc) $(cflags) $< tbgrp.o: tbgrp.c tbgrp.h $(cc) $(cflags) $<
Fehler:
gcc -ansi -Wall -pedantic -c -DLINUX error.c
gcc -ansi -Wall -pedantic -c -DLINUX tbgrp.c
gcc error.o tbgrp.o -o team-builder
/usr/lib/gcc/i486-linux-gnu/4.1.3/../../../../lib/crt1.o: In function_start': (.text+0x18): undefined reference to
main'
collect2: ld returned 1 exit status
make: *** [team-builder] Fehler 1vielleicht noch n tipp? ich hab das -c mal vor die # gehängt, hilft aber auch nicht
-
Der linker findet keine main() funktion, bist du dir sicher, dass in einer deiner Sourcefiles eine
int main()
ist?
-
nur die team-builder.c hat eine main. wozu brauchen die anderen files die main()? da greife ich doch auf andere funktionen als die main zu.
EDIT: kann es sein, dass ich die team-builder.c noch irgendwie in der Makefile berücksichtigen muss? Die enthält ja die main(). Wenn ja, wie muss ich die angeben?
-
bin einen Schritt weiter.
hab jetzt dieses Makefile:
cc = gcc cflags = -ansi -Wall -pedantic objects = team-builder.c error.c tblist.c tbio.c team-builder: $(objects) $(cc) $(objects) team-builder.c -o team-builder team-builder.o: team-builder.c $(cc) $(cflags) $< error.o: error.c error.h $(cc) $(cflags) $< tblist.o: tblist.c tblist.h error.h $(cc) $(cflags) $< tbio.o: tbio.c tbio.h tblist.h $(cc) $(cflags) $<
Dann bekomme ich aber den Fehler hier:
/tmp/ccUxi4J3.o: In function
checkarguments': team-builder.c:(.text+0x0): multiple definition of
checkarguments'
/tmp/ccUd0jIG.o:team-builder.c:(.text+0x0): first defined here
/tmp/ccUxi4J3.o: In functionrun': team-builder.c:(.text+0x35): multiple definition of
run'
/tmp/ccUd0jIG.o:team-builder.c:(.text+0x35): first defined here
/tmp/ccUxi4J3.o: In functionmain': team-builder.c:(.text+0x4b): multiple definition of
main'
/tmp/ccUd0jIG.o:team-builder.c:(.text+0x4b): first defined here
collect2: ld returned 1 exit status
make: *** [team-builder] Fehler 1wieso multiple? die sind doch nur einmal verlinkt oder nicht?
EDIT: Komisch ich hab die tbgpr einfach nur umbenannt...
EDIT2: Problem gelöst... der Link auf die team-builder.c muss weg beim linken der objectfiles...
DANKE FÜR EURE HILFE, Dieses Forum ist mit seinen Membern einfach echt Spitzenklasse ^^
-
Also erstmal schreibst du das "-c" wieder in die "cflags". Dann machst du aus ".c" bei den Dateien in "objects" mal wieder ein ".o".
Als letztes entfernst du "team-builder.c" aus Zeile 8.
Wenn du nun alle C-Files berücksichtigt hast sollte es gehen.Gruß!