C++ Programm in Linux-Terminal ausführen
Halli Hallo! Ich habe folgendes kleines Programm geschrieben:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
// Initialisiere dividers (Anzahl der Teiler)
int dividers = 0;
// Wandle Eingabe zu int um
int figure = atoi(argv[1]);
// Zählt die Teiler der eingegebenen Zahl
for (int i = figure; i >= 1; i--) {
if (figure % i == 0) {
dividers = dividers + 1;
} else {
}
}
// Wenn dividers = 2, ist die gegebene Zahl prim, also:
// Abfragen von dividers, entsprechende Ausgabe
if (dividers == 2) {
printf("%d ist prim.", figure);
} else {
printf("%d ist nicht prim.", figure);
}
}
Was das Programm macht, ist eigentlich egal, ich will es einfach nur über die Konsole ausführen. Das kompilieren klappt soweit auch, aber ich weiß nicht mehr, wie man das jetzt unter Ubuntu im Terminal ausführt?!?!
Viele Grüße und danke im Vorraus, Halbi
4 Antworten
Hallo Halbi,
am besten arbeitest Du mit einer Make-Datei, siehe man make. Insbesondere, wenn Dein Programm aus mehreren Teilen besteht.
Alternativ kannst Du mit einem Shell-Script arbeiten. Meines heißt "bin/Uebersetze.sh" mit dem Inhalt:
#!/bin/bash
OK=T
if [ -r $1.c ]; then
SOURCE=$1.c
elif [ -r $1.C ]; then
SOURCE=$1.C
elif [ -r $1.cpp ]; then
SOURCE=$1.cpp
elif [ -r $1.CPP ]; then
SOURCE=$1.CPP
else
echo -e "\n\t? keine C-Datei '$1'?, Quelldatei ohne Erweiterung angeben\n"
ls -l --color=tty $1*
OK=F
fi
if [ $OK = T ]; then
EXEC=$1
gcc -ggdb $SOURCE -o $EXEC 2>&1 | tee $1.errors
fi
Aufruf
Uebersetze.sh DATEI.c
Das Script prüft die Lesbarkeit von DATEI.c und erzeugt die Datei DATEI ohne Erweiterung (ist unter Linux nicht erforderlich) , welche Du ohne weiteres ausführen kannst.
Eventuelle Fehlermeldungen werden sowohl auf den Bildschirm als auch in DATEI.errors geschrieben.
Viel Erfolg
Günter
den Code habe ich mir nicht angesehen.
Um daraus ein Binary zu machen, brauchst du einen C/C++ Compiler. Installiere dafür gcc und die Standard-Bibliotheken.
Danach sollte sollten gcc und auch c++ verfügbar sein.
Benutze c++ um deine Datei mit dem C-Code zu compilieren (bei Benutzung von gcc müssen einige Optionen angegeben werden, die mit c++ bereits vorhanden sind.
Als Ergebnis der Übersetzung liefert c++ (wenn nicht anders angegeben) die Binär-Datei a.out .
Die ist sofort ausführbar, ohne weiter Handlungen ( wie chmod )
Hier der gesamte Ablauf der Code sei in der Datei test.cc (der Name ist völlig gleichgültig, es würde z.B. auch "Test.mein-erstes" gehen)
cd dahin-wo-test.cc-steht
c++ test.cc
./a.out
Vergiss den Punkt vor /a.out nicht oder schreibe
$PWD/a.out
die Compiler-Bauer handeln schon nach der Devise "was Programmierer lieben"
Kleine Ergänzung: auch shell-Programm-Dateien müssen nicht unbedingt "ausführbar" sein, wenn man sie z.B. mit
bash Programm-Datei
aufruft.
das 1. "Wort" ist der Interpreter ... damit wäre das nur korrekt, wenn es sich um bash-Kommandos in der "Programm-Datei" handelt.
Ein C-Programm ist nach Übersetzung und Binden aber ein ELF-Programm ... und so nicht aufrufbar!
wenn man
"shell-Programm-Dateien"
schreibt, damit Binaries ausschließt und danach ein Beispiele ( z.B. heißt zum Beispiel) angibt, dann müssen doch nicht alle möglichen Fälle damit abgedeckt sein.
Hallo Halbi,
So wäre es leserlicher geworden:
#include <stdio.h>
#include <stdlib.h> int main(int argc, char** argv) { // Initialisiere dividers (Anzahl der Teiler)
int dividers = 0; // Wandle Eingabe zu int um
int figure = atoi(argv[1]); // Zählt die Teiler der eingegebenen Zahl
for (int i = figure; i >= 1; i--) { if (figure % i == 0) { dividers = dividers + 1; } else { } }
// Wenn dividers = 2, ist die gegebene Zahl prim, also:
// Abfragen von dividers, entsprechende Ausgabe
if (dividers == 2) { printf("%d ist prim.", figure); }
else { printf("%d ist nicht prim.", figure); } }
Aber wenn es Dir nur darum geht zu erfahren wie Du Deine fertig compilierte Binärdatei startest, dann hätte es den Code gar nicht gebraucht.
- Kompiliere Deinen Code
- Mach die Binärdatei ausführbar
.
chmod +x tollesprogramm.bin
- Starte das Programm:
.
sh tollesprogramm.bin
oder:
./tollesprogramm.bin
Das der Code auf dem Betriebssystem compiliert werden muss auf welchem die Binärdatei später ausgeführt werden soll ist klar.
lieben Gruß aus Zuhaus
Das der Code auf dem Betriebssystem compiliert werden muss
auf welchem die Binärdatei später ausgeführt werden soll ist klar.
Das hast du bestimmt nur für Halbi so geschrieben, denn es ist im Allgemeinen falsch. Für meinen ARM9-Prozessor mit Linux compiliere ich Programme auf dem PC mit einem Cross-Compiler für dem ARM. Das sind, auch wenn beides Linux-Systeme sind, völlig unterschiedliche Prozessoren.
Compilen,Auführbar machen mit chmod a+x name, ./name ;)
mit "sudo cd name /bin/name" kannst du es von überall aufrufen :)
MfG
also das "./name" ist das ausführen der Datei und das "chmod a+x name" macht die binary ausführbar!
das ist aber eine sehr verkürzte Anleitung. Wo kommt die Datei "name" her? Nach einem Compiler-Lauf mit integriertem Linker ist das Binary immer ausführbar, was soll also dann noch chmod und dann auch noch mir a+x ?
Hallo guenterhalt,
Als nicht Programmierer muss ich Danke sagen für diese Information, wusste ich gar nicht.
lieben Gruß aus Zuhaus