Kopiertes Programm läuft nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich schon wieder.....
    ich habe von meiner ersten Raspi ein paar selbstgeschriebene Programme ( in c++ sowie compiliert) auf einen USB-Stick kopiert und nach /home/pi auf eine zweite Raspi kopiert.
    Da bekomme ich die fertig compilierten Programme aber nicht zum laufen. Erst, wenn ich die c++-Quelltexte nochmal auf der zweiten Raspi compiliere kann ich die Programme ausführen.

    Was mache ich denn da schon wieder falsch???

  • Hallo Hunter_spike,

    ein auf einem System (für ein anderes System) compiliertes Programm läuft nur auf dem Zielsystem - nicht auf jedem anderen.

    U.a. unterscheiden sich die Prozessoren der erwähnten RPi-Modelle.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo,
    Du hast nichts verkehrt gemacht, sondern nur etwas vergessen.

    Wenn Du auf dem Raspi kompilierst, dann erhält die Datei durch den Compiler automatisch den Status ausführbares Programm.

    Wenn die Datei über den Stick übertragen wird, dann weis Windows z.B. , das es eine ausführbare Datei ist und geht richtig damit um.

    In Linux ist das nicht so! Das Dateiatribut ausführbare Datei geht verloren und muß extra gesetzt werden.

    1. Datei kopieren
    2. Dateiatribut setzen
    3. Doppelklick und die Welt ist wieder in Ordnung.


    Dateiatribut setzen :
    Konsole starten
    in das Unterverzeichnis gehen, in dem sich die Datei befindet durch : cd .... Name des Verzeichnises
    dann: chmod 777 MyFilename

    bei Problemen ggf. noch mal nach "chmod" suchen

  • Aro - Schreibt da der wahre Linux-Experte oder was? Alles eine Frage des Dateisystems. Du schreibst Mist, Windows erkennt ausführbare Dateien an der ENDUNG, nicht durch Dateiattribute. Deswegen kann man dort im Gegensatz zu Dateien "in Linux" nicht eine beliebige Dateiendung für Executables vergeben.

    EDIT: Da war wer schneller, teilt aber meine Meinung ;)

    LG


  • =(
    Jetzt nimmst Du mir meine ganzen illusionen:
    Das sind beides Raspberry Pi 3, Kaufdatum 2 Monate auseinander. Es muss doch möglich sein das ich z.B. für einen Freund ein ausfürbares Programm schreibe, ohne das ich extra bei ihm vorbei komme.
    Das muss doch bei jedem (kleinen) Computerspiel etc. auch funktionieren.

  • Du musst dafür sorgen, dass auch alle gelinkten Libraries etc. auf den anderen Systemen vorhanden sind, die dein Kompilat benötigt (prüfen mit "ldd <dein.programfile>"). Oder statische Binaries bauen (hässlich).

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (5. März 2017 um 17:58)

  • Hallo hunter-spike,

    lass Dich nicht von Leuten irritieren, die außer Python nichts akzeptieren und Gift und Galle gegen kompilierte Anwendung speien.

    Was ist das denn für ein Unsinn ... :fies:
    Dazu hast Du bestimmt eine verlässliche Quelle ...

    cu,
    -ds-

    Dafür habe ich sogar eine 100 % verlässliche Quelle !!!

    Ich habe selbst ein mal vor dem Problem gestanden. Eine ausführbare Datei sollte sich selbst updaten, in dem eine ZIP - Datei vom USB - Stick gelesen und automatisch entpackt wird.
    Die Zip enthält eine aktualisierte ausführbare Datei, die an die Stelle der bisherigen Datei kopiert wird. Die neue Datei wird dann gestartet und danach beendet sich das laufende Programm.

    Das Konzept ist genial, wenn es darum geht Updates per Mail zu verschicken, so das auch ein User ohne Computerkenntnisse und vor allem ohne Linuxkenntnisse ein Update selbst durchführen kann.

    Das einzige Problem bestand darin, das die kopierte Datei nicht mehr ausführbar war.

    Aber nur durch das ausführen von "chmod" wurde die Datei wieder ausführbar, so das das Gesamtkonzept perfekt funktioniert.

    Das ist also kein Unsinn sondern erprobte Technik - Und wer es nicht glaubt sollte es selbst ausprobieren anstatt meine Hilfe schlecht zu machen!

  • Ich habe selbst ein mal vor dem Problem gestanden. Eine ausführbare Datei sollte sich selbst updaten, in dem eine ZIP - Datei vom USB - Stick gelesen und automatisch entpackt wird.
    Die Zip enthält eine aktualisierte ausführbare Datei, die an die Stelle der bisherigen Datei kopiert wird. Die neue Datei wird dann gestartet und danach beendet sich das laufende Programm.

    Dein Problem dabei ist ZIP, welches *nix-Permissions nicht speichern kann. Willst du Rechte etc. erhalten, nimm tar.

    EDIT
    linux-zip kann es doch, es muss nur die extended attributes header nutzen.

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (5. März 2017 um 18:39)

  • hallo llutz,

    das Problem hat nichts mit der Zip zu tun !!!!

    Nimm doch einfach einen stink - normalen USB - Stick kopiere darauf eine ausführbare Datei und kopiere diese zurück in einen anderen Ordner.
    Du kannst sie nicht mehr ausführen.

    führe chmod aus und Du kannst sie wieder ausführen !

  • Code
    $ zip test.zip ansiweather 
      adding: ansiweather (deflated 71%)
    $ ls -l
    -rwxr-xr-x 1 lutz lutz    10401 Jan 19  2016 ansiweather
    -rw-rw-r-- 1 lutz lutz     3217 Mär  5 18:34 test.zip
    $ rm ansiweather
    $ unzip test.zip
    $ ls -l
    -rwxr-xr-x 1 lutz lutz 10401 Jan 19  2016 ansiweather
    -rw-rw-r-- 1 lutz lutz  3217 Mär  5 18:34 test.zip

    zip --version
    Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
    This is Zip 3.0 (July 5th 2008), by Info-ZIP.

    unzip -v
    UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (5. März 2017 um 18:42)


  • Nimm doch einfach einen stink - normalen USB - Stick kopiere darauf eine ausführbare Datei und kopiere diese zurück in einen anderen Ordner.
    Du kannst sie nicht mehr ausführen.

    I beg to differ:

    Code
    user@nacht:~$ install -m 755 /dev/null executable
    user@nacht:~$ ls -l executable
    -rwxr-xr-x 1 user user 0 Mar  5 18:48 executable
    user@nacht:~$ cp executable /music/onusb
    user@nacht:~$ ls -l /music/onusb
    -rwxr-xr-x 1 user root 0 Mar  5 18:49 /music/onusb
    user@nacht:~$ cp /music/onusb copy
    user@nacht:~$ ls -l copy
    -rwxr-xr-x 1 user user 0 Mar  5 18:49 copy
  • Hallo,

    was soll das eigentlich aussagen ???

    Wenn das Dateiatribut beim Speichern auf einen USB - Stick verloren geht, dann ist es doch nur nachvollziehbar, das es beim speichern in einer ZIP-Datei ebenso verloren geht.

    Aber hier geht es doch nich darum, wie man den Fehler ebenfalls auslösen kann. Ich bin sicher wir finden da noch ein paar weitere Wege.

    Es geht doch einzig darum, wie Hunter_spike seine kopierten Dateien lauffähig bekommt!

    Einmal editiert, zuletzt von Aro (5. März 2017 um 18:53)


  • ...
    Dafür habe ich sogar eine 100 % verlässliche Quelle !!!
    ...
    Das ist also kein Unsinn sondern erprobte Technik ...


    Es ist und bleibt Unsinn, dass Linux die Datei-Attribute "unterschlägt" ...

    Dein Problem war/ist, dass Du vermutlich einen USB Stick mit FAT32 verwendest ... und FAT32 kennt kein Attribut "ausführbar" und lässt es unter den Tisch fallen ...
    Das hat überhaupt nichts mit Linux zu tun.

    Code
    dirk@mars:~$ ls -l my-sh-script.sh 
    -rwxr-xr-x 1 dirk dirk 24 Mär  5 18:57 my-sh-script.sh
    dirk@mars:~$ 
    dirk@mars:~$ cp my-sh-script.sh /media/dirk/FAT32/
    dirk@mars:~$ ls -l /media/dirk/FAT32/my-sh-script.sh 
    -rw-r--r-- 1 dirk dirk 24 Mär  5 18:57 /media/dirk/FAT32/my-sh-script.sh

    Die Quelle bist Du schuldig geblieben ...

    Also ... zurück zm Thema ... Fehlermeldung?

    cu,
    -ds-


  • Wenn das Dateiatribut beim Speichern auf einen USB - Stick verloren geht,

    Eben: "wenn" bzw. eher "falls". Tut es aber nicht, wie u.a. ich in meinem letzten Post demonstriert habe.

    Ich halte bis jetzt dreamshaders Frage nach einer eventuellen Fehlermeldung für den einzig zielführenden Ansatz.

  • Also:

    Quelltext:


    (Bitte nicht über Sinn oder Unsinn streiten)

    "datum" ist die kopierte Datei, "datum2" die compilierte:


    Automatisch zusammengefügt:
    Aber was ARO geschrieben hat, funktioniert!
    Ich hab "chmod 777 datum" in die Befehlszeile eingegeben und schon kann ich das Prog ausführen.
    Automatisch zusammengefügt:
    Herzlichen Dank allen beteiligten!

    Gruss,

    Achim

    Einmal editiert, zuletzt von hunter_spike (5. März 2017 um 19:43)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!