2016-03-21 13 views
0

Ich habe folgendes Programm in C: „Fun“Austausch der Eintrittspunktfunktion führen Segmentierungsfehler

#include<stdio.h> 

int main() 
{ 
    printf("Normal.\n"); 
    return 0; 
} 

int fff() 
{ 
    printf("Fun!\n"); 
    return 0; 
} 

Ich wollte es kompilieren, so dass, wenn ich das Programm ausführen, es mir gibt. Früher habe ich folgende Zeile mein Programm zu kompilieren:

gcc deneme.c -e fff -o deneme 

Als ich Programm mit dem Namen „deneme“ laufen, ich erhielt:

Fun! 
Segmentation fault (core dumped) 

Wie Sie sehen, ich habe, was ich will, aber nicht verstehen, "segmentation fault" Teil. Was ist der Grund?

+0

Sie versuchen 'fff angeben()' als Entry-Funktion, aber die '-e' Flagge ersetzt nicht' main' - es ersetzt ' _start_, was eine Montage-Routine ist. –

+0

Wie kann ich es kompilieren, so dass es mir das gleiche ohne "segmentaion fault" gibt? – ertugrul

+0

Ihre Eingabe-Funktion sollte vom Typ "void" sein und mit einem Aufruf von "_exit (ret)" enden, wobei "ret" der Rückgabecode ist. Eventuell müssen Sie auch mit '-nostartfiles' kompilieren. –

Antwort

1

Sie versuchen, fff() als Eingabefunktion anzugeben, aber das Flag -e ersetzt die Funktion _start, nicht Haupt. Sie sollten den Rückgabetyp von fff zu void ändern und am Ende der Funktion _exit aufrufen.

void fff() 
{ 
    printf("Fun!\n"); 
    _exit(0); 
} 
0

u verwenden können

gcc filename.c -o executable-filename 
+1

Diese Antwort fehlt jeden möglichen Punkt. Das OP fragt nach dem Ersetzen der Einstiegspunktfunktion. –

+0

Es ersetzt nicht die Einstiegspunktfunktion. – ertugrul