2013-04-26 17 views
5

Ich stieß auf this beim Versuch, eine Antwort zu erhalten. Aber es scheint, als hätte das Poster mehrere Dateien und sie wurden nicht verlinkt, und daher der Fehler.`undefinierter Verweis auf` main` in Cpp-Klasse ohne main()

Aber warum bekomme ich diesen Fehler bei der Verwendung einer einzigen Datei?

g++ myClass.cpp 
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function `_start': 
(.text+0x18): undefined reference to `main' 
collect2: ld returned 1 exit status 

Und warum ist main notwendig hier bei der Kompilierung (von wo kommt es eine Erwähnung der wichtigsten in meinem Code finden)? main ist der Ausgangspunkt der Codeausführung, aber warum nimmt der Compiler an, dass ich hier eine main brauche. Ich kann es in einer anderen Datei definiert haben und gcc -o verwenden, um eine ausführbare Datei zu erstellen?

Oder vielleicht fehlt mir etwas anderes im Code, der den Fehler verursacht?

#include<iostream> 
class myClass 
{ 

public: 
myClass() 
{ 
    std::cout<<"Constructor"; 
} 

~myClass() 
{ 
    std::cout<<"Destructor";  
} 

}; 

Antwort

5

main ist nicht notwendig, um eine Quelldatei zu kompilieren. Es ist notwendig, ein Programm in eine ausführbare Datei zu verknüpfen [1], da das Programm irgendwo starten muss.

Sie müssen den Compiler sagen, dass „dies nicht meine ganze Programm ist, nur kompilieren, aber nicht verbinden“, die ‚-c‘ Option verwenden, so

g++ -c myClass.cpp 

die produzieren eine myClass.o Datei, die Sie später verwenden können, z

g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib 

(Offensichtlich Ersatznamen mit dem, was Sie in Ihrem Projekt haben)

[1] Angenommen, Sie den regulären Linker scrips verwenden, die mit dem Compiler kommen. Es gibt "Wege um das auch", aber ich denke, dass das jenseits dieser Antwort ist.

7

Sie versuchen, eine ausführbare Datei zu kompilieren, so dass eine main Funktion erwartet wird. Sie sollten eine Objektdatei unter Verwendung der -c Flag kompilieren:

g++ -c myClass.cpp 

Während Sie an ihm sind, schlage ich vor, Warnflaggen Hinzufügen -Wall -Wextra zumindest.

1

Sie erstellen Ihre Quelle als eine Anwendung. Fügen Sie -c Option hinzu, um nur Objektdatei zu erzeugen:

g++ -c myClass.cpp 
1

Kompilieren Sie nur ?! -c Option

g++ -c file.cpp 

ansonsten wird das Projekt ein main muss.

1

Sie müssen das -c Flag verwenden, um zu kompilieren und den Compiler nur anweisen, eine Objektdatei zu generieren. Sie weisen den Compiler an, eine ausführbare Datei zu erstellen.

Verwandte Themen