C++ Programm in Linux-Terminal ausführen

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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

Hallo guenterhalt,

Die ist sofort ausführbar, ohne weiter Handlungen ( wie chmod )

Als nicht Programmierer muss ich Danke sagen für diese Information, wusste ich gar nicht.

lieben Gruß aus Zuhaus

0
@HerzVonHessen

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.

0
@guenterhalt

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!

0
@GWBln

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.

0

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!

0
@theGamer93

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 ?

0

C Programmierung: Scanf-befehl funktioniert nicht nach If- Anweisung

Guten Tag habe da ein Problem bei einem Programm an dem ich gerade arbeite: Ich soll mit Kommandos (list, pop, push und exit) einen Stack mit zeichen füllen, das letzte zeichen löschen, eine Liste des Stacks ausgeben oder das Programm verlassen. Momentan funktioniert nur das verleassen des Programms, da der Scanf-befehl hinter der if-Anweisung nach dem Kompilieren nicht ausgeführt wird, um ein Zeichen einzulesen. (fgetc() hat auch nicht funktioniert).

Vielleicht kann mir ja jemand erklären woran es liegt.

Quelltext:

include

include

include

define NSTACK 15

int main(){ //Anfang Main

//Variablendeklaration char eingabe[6]; char stack[NSTACK]; char item; char z; //zwischenspeicher für zeichen int sp=0; //Ende Variablendeklaration

printf("\nStack auffüllen (bis 15 Zeichen)\n");
printf("Liste der Befehle:\n\n");
printf("list = Liste des Stacks anzeigen\n");
printf("push = Zeichen auf den Stack legen\n");
printf("pop = Zeichen vom Stapel nehmen\n");
printf("exit = Programm beenden\n\n");

 while(eingabe){    //Eingabeschleife

  printf("\nBitte geben Sie ihren Befehl ein: ");
  scanf("%s", &eingabe);
  printf("eingegebener Befehl: %s\n", eingabe);

  
  if (strcmp(eingabe,"exit") == 0){             //exit
printf("\n!!Das Programm wird beendet!!\n");
exit(1);
  } //ende exit
  
  else if (strcmp(eingabe,"push") == 0){            //push
scanf("%c", &z);
printf("Zeichen wird auf Stack gelegt\n");
  } //ende push
  else if (strcmp(eingabe,"pop") == 0){         //pop
printf("Das obertste Zeichen wird entfernt\n");
  } //ende pop
  else if (strcmp(eingabe,"list") == 0){            //liste ausgeben
printf("Die Liste des Stacks wird ausgegeben\n");
printf("%s\n", &stack);
  } //ende list
  
 }  //Ende eingabeschleife
 


printf("\ntest");

printf("\n\n"); return 0; } //Ende Main

...zur Frage

C Taschenrechner mit Kommandozeilen-Parametern?

Hallo,

Ich mache gerade einen Taschenrechner, den man so aufrufen kann z.B.

C:\Users\*****\Documents\Visual Studio 2010\Projects\Rechner.exe 5 + 2 [ENTER]

Und dann gibt das Programm in einer DosBox aus: "Das Resultat aus: 5 + 2 = 7

Ok, dass macht man ja mit diesem argc und argv[] zeugs.

Hier ist mal mein Code:

#include "stdafx.h"


int main(int argc, char* argv[])
{
    int Zahl1 = atoi(argv[1]);
    int Zahl2 = atoi(argv[3]);
    int Resultat;

    if(argv[2] == "+")
    {
        Resultat = Zahl1 + Zahl2;
    }
    else if(argv[2] == "-")
    {
        Resultat = Zahl1 - Zahl2;
    }
    else if(argv[2] == "*")
    {
        Resultat = Zahl1 * Zahl2;
    }
    else if(argv[2] == "/")
    {
        Resultat = Zahl1 / Zahl2;
    }
    printf("Das Resultat aus: %i %c %i = ", Zahl1, argv[2], Zahl2);
    printf("\nBitte ENTER drücken");
    getchar();
    return 0;
}

Eigentlich sollte es ja gehen, aber es geht nicht. Ich weiss nicht wie ich den Operator in argv[2] herausbekomme. Kann mir da jemand helfen?

Danke.

MfG KilerAffe

...zur Frage

Linux Shell Befehle nachschlagen direkt im Betriebsystem?

Ich habe bald eine Klassenarbeit, bei der ich in der Shell/Terminal in Linux mit Befehlen Aufgaben machen soll. Als einfaches Beispiel, soll ich mit einem Befehl ein Benutzerkonto erstellen. Es ist aber so viel zu wissen, dass ich mir sehr schwer tue. Meine Frage ist, ob man auch im Betriebsystem, ein Nachschlagewerk zur Verfügung hat, mit dem man nach bestimmten Befehlen suchen kann, weil im Internet darf man während der Klassenarbeit nicht recherchieren.

...zur Frage

Befehle als Verknüpfung in Linux

Ich möchte gerne befehle wie: Sudo apt-get update oder sudo raspi-config auf dem Desktop verknüpfen, so dass ich auf diese Befehle dann direkt über diese Verknüpfung Zugreifen kann. Ich möchte dies unter Linux machen.

Kann mir jemand erklären oder sagen wie das geht oder einen guten Link zu einer Anleitung schicken.

Danke Leander

...zur Frage

Was bedeutet das i++ in diesem Programm?

Hier der Code das programm liest einen satz ein und gibt jedes wort in einer neuen zeile wieder nur wofür das i++ am ende? ich kenns normal nur in ner forschleife um die steigerung z.b. also i=i+1 anzugeben ?!

#include <stdio.h>
main() {
int i=0;
char text[100];
printf("\nBitte einen Satz eintragen.\n");
gets(text);
while(text[i]) {
if(text[i] != '  ')
printf("%c",text[i]);
else
printf("\n");
i++;
}
}
...zur Frage

Mein Java Programm gibt "Primzahl" 9 aus?!?!?!?!?

int zahl, Limit, P;

zahl = 1;                        //Primzahlen von...
Limit = 10;                      //...bis                     
boolean Prim = true;             // Prim = true wenn "zahl" eine Primzahl ist

System.out.println("Die Primzahlen zw. den Zahlen " + zahl + " und " + Limit + " sind: ");

while (zahl<=Limit) {            // solang "zahl" kleiner als "Limit" ist 
  if (zahl%2 == 0) {
    Prim = false; 

  } 
  if (Prim) {
    System.out.println(zahl);

  } 
  else{

    Prim = true;

  }
  zahl++;
}
...zur Frage

Was möchtest Du wissen?