Eckard Klotz
Posts: 8
Joined: Thu Apr 19, 2018 9:04 am

Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Thu Apr 19, 2018 11:34 am

Hallo zusammen.

Ich benutze seit sehr kurzem einen Raspberry Pi 3 Model B unter Paspbian.

Ich schreibe meine Programme selber unter Verwendung von Code::Blocks und dem GNU-Compiler.
Obwohl der Build-Prozess erfolgreich durchläuft und das Binary vorliegt, kann ich es nicht anstarten, da es nicht dazu berechtigt ist.

Zwar bietet mir der File-Manager an, die Rechte umzustellen um Anyone die Ausführung zu gestatten. Leider werden die Umstellungen aber nicht übernommen. Außerdem würde ich das gerne mittels eines Konsolen-Befehls machen, der gleich als Post-Build-Step von Code::Blocks aufgerufen wird.

Kann mir da jemand weiterhelfen?

Mit freundlichen Grüßen,
Eckard Klotz.

fbe
Posts: 338
Joined: Thu Aug 17, 2017 9:08 pm

Re: Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Thu Apr 19, 2018 5:07 pm

Das Konsolenkommando zum Ändern der Rechte ist chmod. In Deinem Fall:

Code: Select all

chmod 755 helloworld
wenn Du möchtest, dass jeder helloworld ausführen kann.

Code: Select all

man chmod
gibt Dir einen "Handzettel" zum Kommando.

Was meinst Du mit "Umstellungen im File-Manager werden nicht übernommen"? Bekommst Du eine Fehlermeldug, dass das nicht erlaubt ist oder passiert einfach nichts und die Rechte sind wie vorher?

Normalerweise sollte das unterhalb von Deinem Home-Verzeichnis funktionieren, wenn Du nicht irgendwo ein überflüssiges "sudo" in Deinem Build-Prozess eingebaut hast und damit Dateien erzeugst, die Dir nicht gehören.

Wenn Du Deine Dateien aber z.B. nach /usr/local/bin installieren möchtest, dann brauchst Du schon root-Rechte, um die Dateien überhaupt in das Verzeichnis zu schreiben, das root gehört. Hier wäre

Code: Select all

sudo install -g root helloworld /usr/local/bin
der Weg zum Ziel. Die Berechtigungen an der Datei im Build-Verzeichnis brauchst Du dafür vorher nicht zu ändern. Du darfst es natürlich, falls Du sie vor der Installation auch schon mal ausführen möchtest.

Auch für install gibt es eine Man-Page.

Bei mir sind die Binärprogramme, die der gcc erzeugt, für jeden ausführbar. Möglicherweise sind sie das Bei Dir auch, sie werden nur nicht gefunden. Anders als bei Windows ist bei Linux das aktuelle Arbeitsverzeichnis nicht im Pfad und Du musst wirklich

Code: Select all

./helloworld
(oder helloworld mit vollständigem Pfad) an der Kommandozeile eintippen, wenn Du helloworld im aktuellem Verzeichnis aufrufen möchtest.

Ich kenn Code::Blocks nicht, aber wenn der Makefiles verwendet, dann tu kein sudo in das Makefile und mach install nicht zum default target!

Eckard Klotz
Posts: 8
Joined: Thu Apr 19, 2018 9:04 am

Re: Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Fri Apr 20, 2018 5:58 am

Hallo FBE.

Vielen Dank für Deine ausführliche Antwort.

Ich habe versucht Deine beiden Tips betreffend "chmod" zu beherzigen. Das heißt, ich habe aus der Man-Page mir noch die Option "-v" heraus geangelt, um noch einen Diagnose-Output zubekommen:
chmod -v 755 bin/Release/CreateSimulinkInterface
Die Diagnose lautet dann:
mode of ‘bin/Release/CreateSimulinkInterface’ changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
Aber funktionieren tut es trotzdem nicht ("permission denied").

Was meinst Du mit "Umstellungen im File-Manager werden nicht übernommen"? Bekommst Du eine Fehlermeldug, dass das nicht erlaubt ist oder passiert einfach nichts und die Rechte sind wie vorher?
Es passiert einfach nichte und die Rechte sind wie vorher.

Ich denke jedoch Du haßt das eigentliche Problem schon unbewußt angeschnitten:
... Normalerweise sollte das unterhalb von Deinem Home-Verzeichnis funktionieren ...
Da meine Programmier-Arbeit Teil eines größeren Projektes ist und ich alle Quelltexte täglich über ein Versionierungs-Tool gesichert werden muß, welches sich auf einem Windows-PC befindet, habe ich alles auf einem USB-Stick, der dann natürlich über "media" und nicht unter "home" eingeklinkt wird. Könnte es eventuell sein, daß ich erst ein mal meinen USB-Stick mit freigeben muß, damit die rechte einzelner Dateien auf diesem Stick sich auch wie gewünscht auswirken?

Oder muß ich auf dem USB-Stick eine anderes Programm damit beauftragen, mein Binary auszuführen. Ich habe eine ähnliche Erfahrung mit Bash-Dateien gemacht.
Normalerweise kenne ich das so, daß man in der ersten Zeile

Code: Select all

#!/bin/bash
reinschreibt und die Datei als ausführbar konfiguriert. danach ruft man sie auf wie unter Windows eine Batch Datei.
Das hat bei mir auch nicht funktioniert ("permission denied"). Wenn ich aber in der Befehls-Zeile for die den Namen der Bash-Datei "bash" schreibe dann funktioniert es.


Mit freundlichen Grüßen,
Eckard Klotz.

lbog
Posts: 123
Joined: Sun Mar 06, 2016 9:44 am

Re: Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Fri Apr 20, 2018 8:05 am

Eckard Klotz wrote:
Fri Apr 20, 2018 5:58 am
Es passiert einfach nichte und die Rechte sind wie vorher.
Poste mal die Ausgaben von:

Code: Select all

echo "int main(void) {const char msg1[] = {'H','e','l','l','o',' ','w','o','r','l','d'}; puts(msg1); return 0;}" | gcc -s -x c - && ls -la ./a.out && file ./a.out && ./a.out && rm ./a.out

fbe
Posts: 338
Joined: Thu Aug 17, 2017 9:08 pm

Re: Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Fri Apr 20, 2018 6:52 pm

Eckard Klotz wrote:
Fri Apr 20, 2018 5:58 am
Da meine Programmier-Arbeit Teil eines größeren Projektes ist und ich alle Quelltexte täglich über ein Versionierungs-Tool gesichert werden muß, welches sich auf einem Windows-PC befindet, habe ich alles auf einem USB-Stick, der dann natürlich über "media" und nicht unter "home" eingeklinkt wird. Könnte es eventuell sein, daß ich erst ein mal meinen USB-Stick mit freigeben muß, damit die rechte einzelner Dateien auf diesem Stick sich auch wie gewünscht auswirken?

Oder muß ich auf dem USB-Stick eine anderes Programm damit beauftragen, mein Binary auszuführen. Ich habe eine ähnliche Erfahrung mit Bash-Dateien gemacht.
Wenn Du den Stick auch in einen Windows-PC stecken möchtest, hast Du mit chmod keine Chance. Die von Windows unterstützten Dateisysteme geben das nicht her. Du könntest den Stick so mounten, dass jede Datei für jeden ausführbar ist.

Wenn Dein Windows-PC und Dein Raspberry Pi über Netzwerk aufeinander zugreifen können, solltest Du lieber den Dateiaustausch über Netzwerk einrichten. Das ist viel einfacher als einen USB-Stick hin- und herzustecken. Da wärst Du aber sicher schon von selbst drauf gekommen.

Viele Schreibaktionen (im Build-Prozess) sind auch nicht gut für die Lebensdauer Deines USB-Stick und wären es auch nicht für SD-Karten. Wenn das Projekt wirklich groß ist, solltest Du lieber eine USB-Festplatte dafür verwenden.

Was für ein Versionierungs-Tool befindet sich denn auf dem Windows-PC?

Eckard Klotz
Posts: 8
Joined: Thu Apr 19, 2018 9:04 am

Re: Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Mon Apr 23, 2018 2:17 pm

Hallo FBE und LBOG.

Ich denke das Problem ist tatsächlich der USB-Stick. Wenn ich das Programm auf das Home Laufwerk vom Raspberry kopiere und kann ich die Rechte vernünftig einstellen und das Ganze auch starten. Ich denke in diese Richtung muß ich wohl gehen.

Jetzt wäre es natürlich angebracht alles auf Home zu bringen. Aber das möchte ich aus verschiedenen Gründen vermeiden:
1. Das Versionierungs-Tool MKS von PTC steht nur auf Windows-PCs zur Verfügung (eingerichtet durch unseren IT support).
2. Es soll regelmäßig ausprobiert werden, ob Änderungen im Quelltext sich nicht auf die Verwendbarkeit unter Windows auswirken.

Ich selber bereite das ganze auch nor für eine Studentin bei uns vor. Das ursprüngliche Projekt ist auf Windows XP und 7 entwickelt worden und soll auch weiterhin dort laufen. Zusätzlich soll das ganze nun auf Raspbian portiert werden. Die Erfahrung zeigt, daß es sehr lange dauert, neue Kollegen und Studenten and eine regelmäßige Benutzung unserer Quelltext-Versionierung zu gewöhnen. Und da hoffe ich einfach das die Verwendung eines USB-Sticks es leichter macht jeden Abend Änderungen einzuchecken.

Mit freundlichen Grüßen,
Eckard Klotz.

User avatar
DerKleinePunk
Posts: 33
Joined: Thu Feb 23, 2017 9:18 am
Location: Germany
Contact: Website

Re: Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Sat May 05, 2018 4:45 am

Hallo,

vielleicht auch eine Möglichkeit die zum Besseren Händling führt:
rsync (https://de.ccm.net/faq/1451-rsync-fuer-windows)

Am PI eine USB Platte um Stick und SD zu schonen. Dann auf der Windowskiste Abends per rsync das Verzeichnis holen und ein Checken. Das sollte vom Aufwand nicht mehr sein als den Stick um zu stecken. Kann man ja sicher komplett per cmd machen. Ich gehe davon aus das man den eincheck vorgang aus der cmd starten kann.

Es ist gruselig zu lesen das einchecken und Quellcode Verwaltung für mache immer noch nur lästig ist...
PI 2 und PI 3 1GB Raspbian Strech
Der Wandel von Atom zum Bit ist unwiderruflich und nicht mehr aufzuhalten.
Nicholas Negroponte

ghans
Posts: 7792
Joined: Mon Dec 12, 2011 8:30 pm
Location: Germany

Re: Wie kann ich ein selbst geschriebenes Binär-Programm lauf-fähig machen?

Sat May 05, 2018 7:59 am

1) FAT32 unterstützt nicht das Unix-Rechtemodell. Inbesondere das essentielle "executable"-Flag existiert schlichtweg nicht.
2) FAT32 formatierte USB sticks werden per default zusätzlich mit "noexec" geöffnet (gemounted). Das wird das eigentliche Problem sein.

Ich empfehle FileZilla um die Dateien über das Netzwerk anstatt über Sticks zu kopieren. Oder gleich eine Batchdatei mit dem "pscp.exe" Befehl (mitgeliefert bei PuTTY) schreiben.

ghabs
• Don't like the board ? Missing features ? Change to the prosilver theme ! You can find it in your settings.
• Don't like to search the forum BEFORE posting 'cos it's useless ? Try googling : yoursearchtermshere site:raspberrypi.org

Return to “Deutsch”

Who is online

Users browsing this forum: No registered users and 3 guests