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

g++ Problem unter Suse Linux 10.0

Nachdem ich öfters mal Linux gesehn habe, dachte ich mir ich, installiere es mir auch. Das ging auch so weit gut. Bei einigen Problemen konnte ich auch schnell Hilfe in diesem Forum finden und hoffe deshalb auch wieder auf Hilfe.

Mein Problem bezieht sich auf das Programm g++.

Ich hab einfach eine C++ Datei geschrieben, Inhalt:

Code:
#include <iostream>

int main()
{
  std::cout << "Hallo Welt! \"; 
}
und als "Versuch1.cpp" abgespeichert. Dannach hab ich g++ wie folgt in der Konsole aufgerufen:
Code:
g++ -c Versuch1.cpp
g++ -o Versuch1  Versuch1.o
Beides wurde ohne irgendeine Wahnung oder einen Fehler ausgeführt. Auch wurden alle Dateien erzeugt, wie es geschehen sollte.
Ruft man jetzt jedoch die Datei Versuch1 durch die Eingabe:
Versuch1
in der Konsole auf, so erhalte ich folgende Meldung:
bash: Versuch1: command not found
Als Linux Neuling kann ich mit dieser Zeile leider relativ wenig (besser gesagt gar nichts ) anfangen.
Hat jemand von euch einen Rat oder einen Tipp für mich?

Vielen Dank im Voraus
 
./Versuch1 aufrufen

dein aktuelles Verzeichnis ist nicht im Pfad (PATH) definiert, deshlab musst du das Programm mit "./name" aufrufen, oder kopiere es in ein ~/bin Verzeichnis.
 
Vielen, vielen Dank für die Wansinns schnelle Antwort.
Du hast recht, so funktioniert es. Konnte man das aus der Meldung vom System ablesen?

Auf jedenfall werd ich mich jetzt mal schlau machen, wie ich mein Verzeichniss zum Path hinzufügen kann.

Nochmals Vielen Dank
 
Vandor schrieb:
Auf jedenfall werd ich mich jetzt mal schlau machen, wie ich mein Verzeichniss zum Path hinzufügen kann.
Das brauchst Du nicht zu tun und ich würde es auch nicht tun. Gewöhn Dir einfach an, dass man Programme unter Linux nur dann mit dem einfachen Dateinamen ausführen kann, wenn sie in einem der Verzeichnisse liegen, die man mittels
Code:
echo $PATH
anzeigen lassen kann. Für alle anderen Verzeichnisse gewöhnst Du Dir einfach an, dass man vor den Dateinamen ein "./" davorsetzen muss. Mehr ist nicht zu tun.
 
traffic schrieb:
ich würde es auch nicht tun.

ich auch nicht :) Begründung: es muss Dir nur jemand ein Programm unterschieben, dass wie ein gängiger Befehl heißt (z.B. ls) dann wird das ausgeführt statt /bin/ls und das kann üble Folgen haben. Das aktuelle Verzeichnis in einem Pfad muss IMHO als Sicherheitsrisikio klassifiziert werden.
 
Ich muss dazu sagen, dass ich echt totaler Neueinsteiger bin, was Linux und C++ angeht. Im Moment muss ich für mein Studium ein Praktium machen, bei dem es um Grundlagen beim täglichen Benutzen des Computers geht. Neben Bürosoftware und musste man auch Linux und im Moment auch C++ kennen lernen (natülich unter Linux). Nachdem ich da mit Linux ein wenig "gespielt" hab (so nen ich das jetzt mal das Erstellen/Löschen von Ordnern, Rechte vergeben...), empfand ich es als interessante Alternative zu Windows. Auf den Rat, das Suse sehr einfach wäre und die Installation fast so einfach ist wie bei Windows, hab ich mich einfach mal dran gewagt. Klar ist bisher alles neu und vieles anders, aber ich denke, ich werde sobald ich mich mit Linux besser auskenne, mein Windows auf Eis legen.

Aber zurück zu C++. Kann schon sein das man bei main() in die Klammern void schreiben muss. Ich hab mich hier jedoch einfach mal an die Vorlage aus dem Praktikum gehalten, da es da schließlich funktioniert hatte. Schließlich hab ich was C++ angeht noch keine Ahnung, da ich bisher nur HTML, PhP und Java Programmiert hab und die genaue Syntax von C++ noch nicht kenne (Wird aber noch, ich abreite dran *G*)

Noch eine letzte Frage zum Schluss, auf die Gefahr hin das ich euch nerve:
Unter Windows kenn ich Programme nur auf die Endung: .exe . Bei Linux fehlt dies (zumindest seh ich es nicht). Bedeutet das, dass ich meine (einfachen), kompilierten Programme nur unter Linux laufen und nicht auf einem Windows Rechner sinnvoll ausgeführt werden können?
 
Vandor schrieb:
Unter Windows kenn ich Programme nur auf die Endung: .exe . Bei Linux fehlt dies (zumindest seh ich es nicht). Bedeutet das, dass ich meine (einfachen), kompilierten Programme nur unter Linux laufen und nicht auf einem Windows Rechner sinnvoll ausgeführt werden können?
Ja. C++-Programme müssen für die Zielplattform kompiliert werden, d.h. es ist zwar, sofern man nur Standardbibliotheken nutzt, möglich, denselben Quellcode für mehrere Systeme zu verwenden, aber kompilieren muss man immer noch für jede Zielplattform extra.

Das ist übrigens keine Frage der Dateiendung. Du kannst das unter Linux kompilierte Programm gerne umbenennen und eine beliebige Dateiendung hinzufügen, es wird dann auch weiterhin unter Linux laufen, aber für Windows wirst Du es auf einem Windows-System neu kompilieren müssen.
 
allgemein zum Thema:

Code:
int main()
oder
Code:
void main()
kann ich diese Seite empfehlen: void main() is not legal in C++ but is legal in C.

jetzt zu der leeren Argumentliste, ein kurzer Blick in einen alten K&R (2. Ausgabe) liefert:

Da die speziellen Versionen von (FUNKTIONSBEISPIELEN) keine Arbumente haben, sollten ihre Prototypen am Anfang logischerweise beispiel() sein. Zwecks Kompatibiltät mit äleren C-Programmen sieht der Standard jedoch eine leere Aufzählung als Deklaration vom "alten" Stil an und schaltet jegliche Überprüfung der Argumentliste ab; das Wort void muß für eine explizit leere Liste verwendet werden.

hier kommts also auf den Compiler an, welchen Standard von C der umsetzt. Bei C++ ist soweit ich das jetzt ohne Zugriff auf den offiziellen Standard überblicken kann (warum ist der nur so teuer :( ) void nur noch als Typ vereinbart und nicht mehr als leere Liste, d.h. main(void) ist vom Standard u.U. nciht gedeckt. Hier muss man wieder die Compiler-Handbücher fragen...

Wenn hier einer Zugriff auf den Standard hat, kann er ja mal die relevanten Dinge Posten...[/quote]
 
Oben