Forum
Tipps
News
Menu-Icon

Programmieren unter (Suse) Linux

Habe ein Problem, ich lerne grade programmieren und möchte diese Compilieren. Dies mache mit dem Befehl cc oder gcc darauf wird auch die gewünschte a.out.
Diese kann ich aber nicht öffnen auch mit alr+F2 und eigabe lässt sich da nichts dran rütteln!
Was habe ich falsch gemacht, bzw wie funktionierts richtig ???
Wäre über jeden Tipp dankbar !!!


Antworten zu Programmieren unter (Suse) Linux:

$ echo "int main(void){printf(\"Hallo Welt\");return 0;}">foo.c
$ make foo
gcc     foo.c   -o foo

$ ./foo
Hallo Welt
$

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Da würde ich mich auch gerne mit dranhängen:

Ich arbeite zZ zwar nciht mehr viel mit Linux, hatte aber das Problem, dass wenn ich eine Datei compiliere, diese nicht automatisch als "ausführbar" gekennzeichnet wird. Konnte also weder über das Terminal noch aus KDE raus mit "foo" mein Programm starten.
Gibt es da einen "Trick"?

Gruß Spawn

PS: @Fabian: Du kannst den von ..... erklärten Weg natürlich auch etwas abändern und die Datei foo.c im Texteditor o.ä. erstellen  ;)

Edit: Meinte natürlich ",,,,,", nicht "....."  ;D
Echt verwirrend  ???

« Letzte Änderung: 29.04.05, 16:18:26 von Spawn »
Ich arbeite zZ zwar nciht mehr viel mit Linux, hatte aber das Problem, dass wenn ich eine Datei compiliere, diese nicht automatisch als "ausführbar" gekennzeichnet wird.

Das Quoting ist 1:1 aus einer Shell kopiert...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Mmh, dann mache ich wohl was falsch.
Hatte es zB mit Aurox versucht.
Da habe ich erst meine kleine test.c gebastelt, dann wie Du, gcc test.c -o test und das wars.

Moment, da fällt mir doch was auf: "make foo"? Ist das auf einer Zeile mit gcc (wegens fehlendem $ vor gcc)?
Und wichtig vielleicht auch noch?
Ich Drops....

Also, dass 'gcc' keine ausfuehrbare Dateien bauen soll, habe ich noch nie gehoert.

Ein paar Fehler fallen mir spontan ein:

1. Du kompilierst nicht mit 'gcc foo.c -o foo', sondern 'gcc -c foo.c -ofoo' ( dann wird kein Executable erstellt )

2. Du kompilierst richtig mit 'gcc foo.c -ofoo', versuchst dann aber auf der Shell: 'foo' auszufuehren - was nicht klappt, weil '.' nicht im Pfad liegt.

Zitat
Moment, da fällt mir doch was auf: "make foo"? Ist das auf einer Zeile mit gcc (wegens fehlendem $ vor gcc)
Das mit dem 'gcc ...' ist das, was 'make foo' ausgibt. Wenn kein 'Makefile' mit anderen Regeln im Verzeichnis liegt kompiliert 'make foo' halt mit Standardregeln aus einer vorhanden 'foo.c' oder 'foo.cpp'

hallo,
seit ihr mit der benutzeroberfläche von linux schon vertraut?

wenn ja, dann seit mir nicht böse, wenn ich euch den schritt zum erfolgreichen kompilieren so deteiliert beschreibe.

ich nehme an, dass ihr euer text editor mit "kwrite" über die konsole geöffnet habt.
1) nachdem ihr euer programm geschrieben habt,     speichert ihr es am besten mal auf dem desktop.

2) nun öffnet ihr die konsole und gebt erst einmal den pfad an wo eure txtdatei liegt. "cd Desktop"

3) nun startet ihr den compiler "gcc programmname -o programmname"

4) jetzt müsstet ihr da programm öffnen können
"./programmnama"

wenn ihr mit eurem programm die ports des rechners ansteuern wollt, müsst ihr eurem programm noch rootrechte geben.

















mal eine zwischenfrage

ich habe die ganze zeit in VisualC++ unter windows programmiert. nun will ich ein programm in linux zum laufen bringn.
es enthält eine tastaturabfrage. wenn ich z.B. eine pfeiltaste drücke, soll etwas ausgegeben werden, ohne dass ich zuvor enter drücken muss.

in VisualC++ habe ich dafür den befehl "kbhit()" benutzt.
unter dem GCC compiler läuft das nicht. kennt jemand einen alternativbfehl.

mit "getchar()" läuft es nur dann, wenn ich nach jeder eingabe auch die entertaste drücke. ich möchte es so haben, dass ich sobalt ich eine bestimmte taste drücke GLEICH etwas passiert.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Erstmal danke für die umfangreiche Beschreibungen (euch beiden). Eigentlich habe ich allerdings exaktemente Sokrates' Weg gewählt. Der einzige Unterschied war, dass ich das Programm nicht mit "./test" sondern mit "test" gestartet habe, ist das vielleicht der kleine aber feine Unterschied? Habe jetzt blöderweise kein Linux installiert um es zu versuchen.

Zu dem Tastenproblem: Ich hatte mal etwas in Unix gemacht und da habe ich das ganze (obwohl es sicher auch andere Wege gibt) mit folgendem gemacht:

fflush(stdin);
getc(stdin);

Kompiliert wurde das meines Erachtens auch mit gcc. Ja, da bin ich mir sehr sicher.
Allerdings hörte ich mal, dass es bei dieser Methode wohl Probleme geben _kann_, wegens dem "Tasten-Puffer" soweit ich mich errinere. Habe aber nie schlechte Erfahrungen gemacht.

Gruß Spawn

danke für deine antwort,
ich hoffe, dass es so funktioniert. es ist aber echt schwer genaue anweisungen zu diesem thema im internet zu finden.

ich werde es heute mal ausprobieren. wenn es noch fragen gibt, kann ich sie ja ins forum stellen.

gruß sokrates

@Spawn,

da bin ich auch mal drauf reingefallen... nenne niemals ein Programm test. Weil in bash is wohl n Befehl eingebaut der auch so heisst und immer Vorrang hat :-)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Uups, könnte das der Anstoß allen Übels gewesen sein?! Ich muss unbedingt mal wieder Linux installieren ums zu testen....

hallo spawn,
ich habe deinen vorschlag mal ausprobiert.
der compiler arbeitet zwar ohne probleme, doch ich würde gerne mal wissen, was dieser befehl macht.

fflush(stdin);
getc(stdin);

mfg michael

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Also, getc() bewirkt eigentlich das gleiche wie getchar(), von der technischen Seite gibt es vielleicht Unterschiede, aber das Resultat ist das gleiche. getc braucht allerdings eine Quelle, in dem Fall stdin, also die Standardeingabe, was dann (hoffentlich) die Tastatur ist.
Nun wird sich das aktuelle Zeichen aus dem Tastaturpuffer geholt. Nun kann es aber passieren, dass dieser Puffer nicht nur ein Zeichen enthält. Kennst Du vielleicht von QBasic oder alten Spielen: Wenn Du die ganze Zeit eine Taste drückst, dann damit aufhörst und eine andere drückst, wird erstmal eine ganze Zeit länger die erste Taste "registriert" und dann erst die zweite. (Hoffe, die Erklärung war schlüssig...)

Also wird vorher erstmal mit fflush(stdin) der Puffer gelöscht.

Gruß Spawn

Wenn man schon auf der Konsole Tasten abfragen möchte wie z.B. die Cursortasten, dann sollte man dafür einen Bibliothek wie Curses nehmen.

Denn die funktioniert auch mit anderen Terminals/Betriebssystemen/Telnet... während Sachen wie kbhit() in jeder Umgebung anders oder gar nicht funktionieren.


« Turbo-Pascal Problem.....Programmbibliothek für XP-Systemzugriffe gesucht »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...

QR-Code
QR-Codes, die Abkürzung für "Quick Response Codes", sind eine Form von zweidimensionalen Barcodes. Damit lassen sich Informationen schnell und effizient speiche...