Makefile-Fehler: undefinierter Verweis auf main

8

Ich versuche, meinen Code mit make zu kompilieren. Normalerweise kompiliere ich meinen Code so:

%Vor%

Um diesen langen Befehl loszuwerden, habe ich versucht, ein Makefile zu schreiben:

%Vor%

Dann bekomme ich diesen Fehler:

%Vor%

Kann mir jemand helfen?

    
nic 27.06.2012, 11:24
quelle

3 Antworten

16

Wenn Sie nur eine Datei kompilieren und nicht verknüpfen, verwenden Sie das Flag "-c".

Zum Beispiel: -

%Vor%

Auch beim Kompilieren gibt es keine Notwendigkeit , dem Compiler "$ (LIBS)" bereitzustellen, sondern nur beim Verknüpfen. Sie benötigen auch nicht die Linker-Flags, da der Linker nicht mit dem Flag "-c" aufgerufen wird.

Du könntest also schreiben,

%Vor%

AKTUALISIERT (basierend auf Kommentaren): -

Beim Verknüpfen der Dateien erwartet der Linker nur eine main -Funktion. Im obigen Fall ist die Hauptfunktion nicht in db.cpp definiert. Daher gibt der Linker, obwohl die Kompilierung erfolgreich ist, einen Fehler aus, da er die Funktion main nicht finden kann.

    
rajatkhanduja 27.06.2012, 11:30
quelle
2

Wenn Sie ohne das Flag -c kompilieren, versucht gcc, das Programm zu verknüpfen. Da die Hauptfunktion höchstwahrscheinlich in der Datei main.c und nicht in db.c liegt, schlägt der Linker beim Suchen nach der Hauptfunktion in db.c fehl. Dies bedeutet, dass Sie dem Compiler mitteilen müssen, dass Sie nur eine Ausgabe wünschen, die noch nicht verknüpft, aber in eine Objektdatei übersetzt wurde, und dies ist genau das, was das Flag -c tut.

Das ergibt was rajatkhanduja sagte:

%Vor%     
risingDarkness 27.06.2012 11:38
quelle
0

Ich schätze, du hast die Link-Regel verpasst.

Sie sollten eine erste Regel haben, die sagt, wie man verlinkt:

%Vor%

Und diese Regel muss die Voraussetzung für all :

sein %Vor%

Da alle Ihre "* .o: * .cpp" -Regeln identisch sind, können Sie eine einzelne Regel angeben und make die Dateinamen für Sie ersetzen. Fragen Sie, ob Sie weitere Daten dazu benötigen.

    
j4x 27.06.2012 11:41
quelle

Tags und Links