• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Programm in C übersetzen, linken und starten, aber wie ?

Hallo,
ich wollte einen kleinen Benchmarktest für eine Embedded Umgebung an meinem Linux Desktop austesten. Ich habe schon ewig keine Programme für den PC mehr geschrieben, das letzte Mal war mit Turbo C.
Also das bekannte Programm ´ Hello World´ :
#include <stdio.h>
int main()
{
(void)printf("Hello, World!\n");
return 0; /* Just to be nice */
}
lässt sich mit ´ gcc -o hello hello.c´ in einen ausführbaren Objekt-Code übersetzen und mit ´ sh hello|./hello´ in der bash auch starten, gibt ´ Hello, World´ aus, erzeugt aber die Fehlermeldung: hello: hello: cannot execute binary file
Ein weiteres Programmfragment heißt serial.c:
#include <stdio.h>
#include <math.h>

int main(int argc, char **argv)
{
int n;
printf("Enter the number of intervals: (0 quits) ");
scanf("%d",&n);
}

und lässt sich mit ´ gcc -o serial serial.c´ übersetzen, KDE erkennt dann auch eine ausführbare Datei mit dem Namen ´ serial´ , wenn man sie jedoch versucht mit ´ sh serial|./serial´ auszuführen, dann bekomme ich auch die Fehlermeldung cannot execute binary file, in der nächsten Zeile steht die gewünschte Ausgabe, aber es ist keine Eingabe möglich.
Sorry, für diese vermutlich blöde Frage, aber ich mache seit Jahren in der Firma mit Texas, Siemens, Hitachi Prozessoren und deren Entwicklungsumgebung herum, (Produktpflege) mich erschlägt es langsam und ich dachte ich könnte mal eine Kleinigkeit unter Linux-C probieren, ohne schon wieder ewig dicke Wälzer lesen zu müssen.
Vielleicht hift mir jemand.
Schon mal vielen Dank,
flyheli
 
Du startest die Programme falsch!

Das hier:
Code:
sh programm|./programm
ist absoluter Käse.

Entweder das zu startende Programm ist ein Shell-Skript, dann gibt es zwei Möglichkeiten:
Code:
sh programm
./programm
Oder es ist kein Shell-Skript, sondern ein Binärprogramm, dann gibt es nur eine Möglichkeit:
Code:
./programm
 
Hallo traffic,

Du hast völlig Recht, so: ./serial funktioniert es.
Die von mir gewählte Art hatte ich hier irgendwo gelesen, aber vermutlich den Zusammenhang nicht verstanden.

Nochmals vielen Dank, jetzt geht´s
Gruß flyheli
 
flyheli schrieb:
#include <stdio.h>
int main()
{
(void)printf("Hello, World!\n");
return 0; /* Just to be nice */
}
1. was soll der cast nach (void)?
2. return 0 ist nicht to be nice, die Funktion ist als "int main" deklariert, also gib gefälligst was zurück. 0 ist im positiven Fall ok...

Insbesondere unter Unix-Systemen sollte man sich das angewöhnen, da die Rückgabewerte von den Callern u.U. ausgewertet werden.
int main(int argc, char **argv)
{
}
return fehlt.

ich empfehle die Anschaffung von Wissen auf toten Bäumen, insbesondere Kernighan&Richi ist für C sehr zu empfehlen...
 
Oben