Hallo
Habe eine
Datei main.cpp, welche unter Windows erstellt wurde...
Wie kompiliere ich diese unter Linux und führe die Datei aus?
Hallo
Habe eine
Datei main.cpp, welche unter Windows erstellt wurde...
Wie kompiliere ich diese unter Linux und führe die Datei aus?
Bitte in die Dokumentation zum GCC gucken. Z.b "info gcc" eingeben oder online unter gcc.gnu.org schauen. Zum Compilieren von C++ Programmen den Compiler am besten als "g++" oder "c++" aufrufen.
Das kompilieren hat nun mit einer Warnung geendet, was kann ich unter ihr verstehen?
Code:linux:/home/dennis/Documents/Schule/PRG/Projekt # g++ main.c main.c:180:1: warning: no newline at end of file linux:/home/dennis/Documents/Schule/PRG/Projekt #
Das heißt ganz einfach, dass in deiner Quelldatei keine Leerzeile am Ende ist.
Bevor du jetzt fragst, warum der Compiler das will suche erst mal im Forum. Denn diese Frage wurde vor einiger Zeit diskutiert.
Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)
LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)
Naja, dann füge ich diese einfach aus :-P
Wie kann ich die kompilierte Datei denn nun ausführen?
Find mich in den FAQ's irgendwie nicht zurecht
Edit:
Trotz Leerzeilen kommt diese Meldung...
Hier der Quelltext:
Code:/*Projekt 2004/2005 DnS GmbH Daniels / Schwarz Kontaktmanager Deluxe 2005 Beta v0.1 Releasetermin: 1. Quartal 2005*/ #include <stdio.h> //#include <conio.h> //#include <process.h> #include <string.h> int eingabe,eingabe2,x=0; FILE *Datei; FILE *laden; char weiter='j',Menue=0; int Version () { printf("Kontaktmanager Deluxe 2005\n"); printf("Version Beta 0.1\n"); printf("DnS GmbH\n"); printf("Bitte Taste druecken..."); //getch(); return 0; } int menu () { printf("\ec"); printf("(1) Kontakte anzeigen\n"); printf("(2) Kontakte hinzufuegen\n"); printf("(3) Terminplaner starten *under construction*\n"); printf("(4) Kontakte loeschen\n"); scanf("%d",&eingabe); return 0; } int Terminplaner () { printf("\ec"); printf("(1) Kalendar anzeigen\n"); printf("(2) Termine hinzufuegen\n"); scanf("%d",&eingabe2); return 0; } int main () { struct KONTAKT { char nachname [20]; char Vorname [20]; char Strasse [20]; char Hausnummer [4]; char Ort [20]; char PLZ [5]; char ICQ [10]; char E_Mail [30]; char Telefon [20]; }; KONTAKT kontakt[30],test[30]; Version(); do { menu(); switch (eingabe) { case 1: unsigned long bytes; x=0; Datei =fopen("Kontakte.txt","r"); if (!Datei) break; while (weiter=='j') { bytes = fread(&test[x], sizeof(KONTAKT), 1, Datei); if (bytes > 0) { printf("Kontakt Nr. %d\n",x+1); printf("Vorname: "); printf("%s\n",test[x].Vorname); printf("Nachname: "); printf("%s\n",test[x].nachname); printf("Strasse: "); printf("%s\n",test[x].Strasse); printf("Hausnummer: "); printf("%s\n",test[x].Hausnummer); printf("PLZ: "); printf("%s\n",test[x].PLZ); printf("Ort: "); printf("%s\n",test[x].Ort); printf("Telefon: "); printf("%s\n",test[x].Telefon); printf("E-Mail: "); printf("%s\n",test[x].E_Mail); printf("Weiter?(j/n)"); scanf("%s",&weiter); x++; } else { printf("\n\nEnde der Datei :-(\n"); break; } } fclose(Datei); break; case 2: do { Datei = fopen("Kontakte.txt","a+"); printf("Kontakt Nr. %d\n",x+1); printf("Nachname: "); scanf("%s",&kontakt[x].nachname); printf("\nVorname: "); scanf("%s",&kontakt[x].Vorname); printf("\nStrasse: "); scanf("%s",&kontakt[x].Strasse); printf("\nHausnummer: "); scanf("%s",&kontakt[x].Hausnummer); printf("\nPLZ: "); scanf("%s",&kontakt[x].PLZ); printf("\nOrt: "); scanf("%s",&kontakt[x].Ort); printf("\nTelefon: "); scanf("%s",&kontakt[x].Telefon); printf("\nE-Mail: "); scanf("%s",&kontakt[x].E_Mail); fwrite(&kontakt[x],sizeof(KONTAKT),1,Datei); fclose(Datei); printf("Weitere Kontakte hinzufuegen?(j/n)"); scanf("%s",&weiter); x++; } while (weiter=='j');break; case 3: Terminplaner();break; case 4: remove("Kontakte.txt");break; } printf("0 = Hautpmenue\n"); printf("1 = Beenden\n"); fflush(stdin); scanf("%uc",&Menue); } while (Menue==0); return 0; }
Geändert von Hannibal19xx (13-01-2005 um 15:47 Uhr)
In deinem Fall mit dem Befehl ./a.out
kompilierst du mit g++ main.cpp -o progname dann führst du mit ./progname aus.
Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)
LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)
Also das Programm compiliert bei mir ohne Fehler.
PS: Wenn ich mir dein Quellcode so ansehe frage ich mich, ob du wirklich C++ programmieren willst/wolltest?
For a world where freedom and knowledge survives the compiler! (https://www.fsfe.org)
If art interprets our dreams, the computer executes them in the guise of programs!
Naja, ist eben ein Projekt aus der Schule...soll wohl c sein^^
THX, geht jetzt
Geändert von Hannibal19xx (13-01-2005 um 16:33 Uhr)
wobei es auch kein sauberes C ist...Zitat von Hannibal19xx
Kannst ja mal versuchen ihn mit dem gcc zu kompilieren, da brauchst du aber 2-3 kleine Änderungen am Quellcode damit es funktioniert.
Aber dann ist es wenigstens sauberes C, als C++ kann man das ja kaum verkaufen.
For a world where freedom and knowledge survives the compiler! (https://www.fsfe.org)
If art interprets our dreams, the computer executes them in the guise of programs!
Wir proggen auch c, von daher passt das...hauptsache die note stimmt nachher
Nur das Auslesen aus der Textdatei klappt nicht, ne Ahnung wieso?
Ach das soll C sein. Dann kompiliere es mal mit einem c compiler (das wird wahrscheinlich auch dein Lehrer machen) Du hast da nämlich ein paar Fehler drin, wenn es wirklich C sein soll.Zitat von Hannibal19xx
PS: und die Dateien sollten dann auch .c heißen.
For a world where freedom and knowledge survives the compiler! (https://www.fsfe.org)
If art interprets our dreams, the computer executes them in the guise of programs!
Wenn das von nem Windows kommt evtl. mal ein dos2unix oder Äquivalentes drüber laufen lassen, damit die Windows Newline in Unix Newlines umgewandelt werden. C Kompiler sind da zwar im Grossen und Ganzen recht robust aber vielleicht bekommste dann die Warnung wegen der fehlenden Leer-Zeile am Ende weg...
chmod -R +t /*
Gibt es nicht die Möglichkeit eine Windows-Umgebung zu simulieren, damit ich nicht alles ändern muss, und das dann wieder nicht unter win richtig läuft?
Wenn du Standard ANSI-C programmierst, dann laufen deine Programme überall und das ist auch das was du machen solltest.
Momentan hast du ein C Programm mit ein paar kleinen syntax Änderungen die es in der Form nur in C++ gibt, weswegen dein Programm mit einem C++ kompilier übersetzt wird mit einem C kompiler aber nicht.
Es sind nur 2-3 kleine änderungen die du in einer Minute gemacht hast (mußt dich eigentlich nur an die Fehlermeldungen halten).
1. vor KONTAKT muß immer ein struct stehen.
2. du mußt die Blöcke in case klammern ({})
For a world where freedom and knowledge survives the compiler! (https://www.fsfe.org)
If art interprets our dreams, the computer executes them in the guise of programs!
Das stimmt nicht; ein Programm für Mikrocontroller A wird zu 99,9 % nicht auf B laufen, auch wenn er dafür fehlerfrei compiliert wurde. Es liegt beispielsweise an der Endianess.Zitat von BeS
Es ist auch normal, dass wenn man nur für Mikrocontroller A programmiert das Programm nicht mehr richtig funktioniert, wenn man statt Compiler X den Compiler Y verwendet. ANSI-C läßt ziemlich viele Freiheiten und bei Details, beispielsweise ob eine Funktion reentrant ist oder nicht, häufig mehrdeutig.
Man kann Code schreiben, der sowohl mit X als auch Y richtig funktioniert, aber das machen 99,9 % der Programmierer nicht; statt int16_t schreiben die int, was natürlich nicht portabel ist, denn int kann 8, 16, 24, 32 oder 64 Bit (oder noch andere Werte) haben.
Leider benutzen die meisten nicht einmal einen Prettyprinter wie z. B. indent, so dass schon die Formattierung des Quelltextes fehlerhaft bzw. chaotisch ist und das trägt nicht zur Fehlerreduktion bei.
Geändert von nobody0 (14-01-2005 um 16:40 Uhr)
Lesezeichen