Warum wird meine ausführbare Datei nicht ausgeführt, wenn ich darauf klicke?


3

Warum kann ich anscheinend eine in C ++ erstellte ausführbare Datei nicht öffnen, indem ich darauf doppelklicke?

Ich habe eine Datei, die ich von einer IDE ausgeführt habe, und möchte wissen, ob es eine Möglichkeit gibt, diese Datei so einzustellen, dass sie das Terminal öffnet, wenn Sie darauf klicken, genau wie es eine EXE-Datei unter Windows tut.

Möglichkeiten:

  • Ein C ++ - Code, den ich meinem Quellcode hinzufügen könnte, um dies zu ermöglichen.

  • Konfigurieren Sie My Pc, um es zu öffnen.

Ich versuche, Toolkits so weit wie möglich zu vermeiden. Ich habe kürzlich eine Anwendung unter Windows kompiliert. (Dank meines Cousins ​​hat er einen PC mit Windows.)

Und es wäre großartig, wenn dies auch unter Windows unter Linux möglich wäre, da wir 2 Release-Ordner haben.

Und ich würde mir wünschen, dass diese einfache Terminal-basierte App läuft, ohne dass man Experte sein muss.


Ich habe diese Zeile hinzugefügt:

System ("Gnome-Terminal");

Es öffnet sich auf dem Terminal, zeigt aber nur den Dateipfad an, nicht das eigentliche Programm.


@Leandro Anstatt "Antworten" hinzuzufügen, um Details hinzuzufügen oder den Befragten zu antworten, bearbeiten Sie entweder die Frage (um Details hinzuzufügen) oder verwenden Sie "Kommentar hinzufügen" (um Personen usw. zu antworten)
Marc Gravell

Antworten:


6

Ich würde erwarten, dass Sie das "ausführbare" Bit in der Datei setzen müssen, die vom Linux C ++ - Compiler ausgegeben wird. Ich glaube nicht, dass dies aus Sicherheitsgründen standardmäßig erfolgt.

Einfach "cd" in das Verzeichnis, in dem sich die erzeugte ausführbare Datei befindet

chmod +x myexecutable

Ersetzen Sie "myexecutable" durch den Namen Ihrer Compiler-Ausgabe.

Versuchen Sie dann, es mit ./myexecutable auszuführen

Ich denke, dies sollte das Programm auch per Mausklick und über die Konsole "lauffähig" machen.

Wenn Sie ein "Skript" mit Befehlen ausführen müssen, können Sie Folgendes in einer Skriptdatei versuchen: Speichern Sie diese Datei als "myexe.sh" oder ähnliches:

#!/bin/sh
command1
command2

Dann wieder benutzen

chmod +x myexe.sh 

Um es so zu machen, dass Sie das Skript ausführen können, klicken Sie darauf.


@Leandro Ich habe meine Antwort bearbeitet, um zu verdeutlichen, dass Sie Ihr Programm in einem Terminal mit einem einfachen Skript
ausführen können sollten

Das Wrapper-Skript ist einfach überflüssig
Lie Ryan

@LieRyan Ich war mir einfach nicht sicher, ob Linux automatisch ein Terminal für eine ausführbare Nicht-GUI-Datei öffnen würde, und stelle dies daher sicher ...
Mokubai

Nun, ich änderte die Dateierweiterung zu sh und arbeitete
Leandro

@ Mokubai Sie müssen eine Terminal-Anwendung verwenden, um das zu tun. @Leandro Dies liegt daran, dass der Fenstermanager / Dateimanager so konfiguriert ist, dass Shell-Skripte in einem Terminal ausgeführt werden. In
gewisser

3

Ich denke, die Wurzel Ihres Problems ist, dass Sie den Unterschied zwischen einem Terminal-Emulator und einer Shell nicht wirklich verstehen und wie Linux herausfindet, wie Prozesse gestartet werden.

Erstens gibt es den "Terminal-Emulator", in Gnome-basierten Umgebungen ist dies normalerweise Gnome-Terminal.

Dann gibt es die "Shell", in Linux ist dies normalerweise bash, obwohl andere Shells möglich sind.

Eine "Shell" läuft in einem "Terminal Emulator". Diese Unterscheidung ergibt sich aus dem Zeitalter der physischen Terminals, in dem ein physisches Terminal die Hardware ist, die Eingaben entgegennimmt, Text in Farben schreibt usw. Die Shell ist eine Software, die Benutzerbefehle verarbeitet und andere Prozesse basierend auf den angegebenen Befehlen verwaltet.

Heutzutage haben wir einen Allzweckbildschirm, auf dem alle Bilder angezeigt werden können. Daher verwenden wir kein physisches Terminal mehr, sondern "Terminalemulatoren", eine Software, die den Job eines physischen Terminals emuliert, und die Shell, die immer noch das ist gleiche alte Shell wie zuvor (nun, moderne Shells nutzen den Vorteil, dass sie sich in einem Software-Terminal-Emulator befinden und nicht durch die physische Beschränkung eines Papiers usw. beschränkt sind, aber die Kluft bleibt bestehen).

Eine "Shell" wird nicht immer in einem Terminal-Emulator ausgeführt. Es gibt auch grafische Shell wie Nautilus (Hinweis Hinweis, Nautilus ist der Name einer Meerestier mit einer großen Shell) oder Windows Explorer (nicht zu verwechseln mit Internet Explorer).

Sowohl in einer Befehlszeilen-Shell, z. B. bash, als auch in einer grafischen Shell, z. B. Nautilus, wird eine ausführbare Datei durch executeSetzen ihres Bits gekennzeichnet.

In einer Befehlszeilen-Shell können Sie ls -ldie Berechtigungsbits einer Datei anzeigen, z. B. bedeutet rwxrwxrwx, dass jeder das Programm lesen / schreiben / ausführen kann. rwxr-xr-- bedeutet, dass der Besitzer die volle Berechtigung hat, Personen in der Dateigruppe die Datei lesen und ausführen, aber nicht schreiben können und andere Personen nur die Datei lesen können. In Nautilus können Sie mit der rechten Maustaste auf eine Datei> Eigenschaften> Registerkarte Berechtigung klicken. Auf der Seite Berechtigungseigenschaften können Sie die Berechtigung der Datei wie in der Befehlszeilen-Shell festlegen.

Eine Datei, deren Ausführungsbit gesetzt ist, wird als ausführbar behandelt und kann durch Ausführen von ./Dateiname (Befehlszeilen-Shell) oder Doppelklicken (Grafik-Shell) ausgeführt werden.

Zuletzt gibt es ein paar andere Feinheiten, wie eine Shell eine Datei ausführt. In den meisten Linux-Shells können Sie ein in python / perl / php / bash geschriebenes Skript "ausführen", das keine kompilierte ausführbare Datei ist. Da diese Dateien nicht von Haus aus ausführbar sind, benötigen sie einen Interpreter (zB Python-Interpreter). Anders als in der Windows-Shell (Explorer), bei der der aufzurufende Interpreter über die Dateierweiterung ermittelt wird. Linux-Shells ermitteln den korrekten Interpreter, indem sie sich die "Hashbang" -Zeile ansehen, die so aussieht

#!/usr/bin/python

Wenn das Ausführungsbit einer Datei gesetzt ist und die Datei diese Hashbang-Zeile hat, ruft die Shell den Interpreter / usr / bin / python mit der aktuellen Datei als Argument auf.

Nautilus kann auch erkennen, wenn es sich bei einem Programm um eine Befehlszeilenanwendung handelt, und bietet Ihnen an, die Anwendung in einem Terminal auszuführen. Wenn Sie auf ein ausführbares Skript doppelklicken, werden Sie von Nautilus gefragt, ob Sie es in einem Terminal ausführen, ohne Terminal ausführen oder die Datei in einem Texteditor bearbeiten möchten.


1

Erstellen Sie ein Skript, um es in einem xterm oder so auszuführen. Stellen Sie sicher, dass Ihr Programm mit dem Benutzer interagiert, bevor Sie es beenden. (Funktioniert es, wenn Sie es in einem xterm ausführen? Funktioniert es, wenn Sie es in einer typischen Bash-Shell ausführen?)

Befehl xterm -e [args1 args2]

Können Sie mir dazu bitte mehr Informationen geben
Leandro

Mit Bash meinst du das Terminal ... Entschuldigung, ich bin nicht sehr vertraut mit Bash. Ich habe es nur einmal benutzt, um den Promtp einzufärben
Leandro

Die Eingabeaufforderung, die Sie im Textmodus Linux haben, ist eine Shell. am häufigsten ist es bash. In seltenen Fällen kann die Standard-Shell auch tcsh oder zsh sein, aber auch dies ist selten. In X benötigen Sie ein Programm, um das Fenster mit dem Text zu versehen. Daher ist ein Terminalfenster normalerweise ein Gnome-Terminal, auf dem Bash ausgeführt wird.
Bubu

1

In einfachen Worten:

  1. In Ihrer generierten ausführbaren Binärdatei fehlt möglicherweise das ausführbare Bit. Unix-basierte Systeme verwenden diese Funktion aus Sicherheitsgründen. Stellen Sie es mit: chmod +x yourbinary.
  2. Die Binärdatei kann tatsächlich ausgeführt werden, aber da Linux keinen Terminalemulator ausführt (der der Schnittstelle zwischen Ihnen und dem ähnelt stdout), um sie standardmäßig auszuführen, können Sie nichts sehen.

Für den letzteren Fall können Sie:

  1. Erstellen Sie ein Skript, mit dem Ihre ausführbare Datei über einen Terminalemulator ausgeführt wird, z.

    exo-open --launch TerminalEmulator -e 'yourbinary'
    

    So führen Sie es auf Ihrem Standard - Terminal (falls Sie haben exoBefehl) oder explizit eine solche verwenden.

  2. Erstellen Sie eine desktopDatei, um sie auszuführen.

  3. Geben Sie ihnen eine benutzerdefinierte, spezielle Erweiterung wie .execund konfigurieren Sie sie so, dass sie mit dem Befehl auf Vorschlag 1 (oder ähnlichem) in Ihren Dateierweiterungseinstellungen ausgeführt werden (sofern Ihr Betriebssystem diese Funktion unterstützt).


0

Wenn Sie es unter Windows kompiliert haben und es sich um eine Exe handelt, sehe ich keinen Grund, warum ein Terminal unter Windows nicht geöffnet werden sollte, wenn Sie auf die ausführbare Datei doppelklicken. Sind Sie sicher, dass der Code nicht heruntergefahren wird (Segfault usw.)? Es wäre eine gute Idee, um sicherzustellen, dass das Programm nicht abstürzt.


Das auf Windows funktioniert perfekt ist das auf Linux kompiliert , wo ich einen Weg finden , es zu öffnen , als ob es ein Fenster auf seinen jeweilsen OS .exe war
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.