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 tomain'
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-builderso 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 tomain'
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 ofcheckarguments'
/tmp/ccUd0jIG.o:team-builder.c:(.text+0x0): first defined here
/tmp/ccUxi4J3.o: In functionrun': team-builder.c:(.text+0x35): multiple definition ofrun'
/tmp/ccUd0jIG.o:team-builder.c:(.text+0x35): first defined here
/tmp/ccUxi4J3.o: In functionmain': team-builder.c:(.text+0x4b): multiple definition ofmain'
/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ß!