Hallo, ich habe ein kleines C Programm geschrieben welches ich dann mittels GCC cross kompiliert habe für den ARM Prozessor. Dieses Programm habe ich dann per FTP (binary mode und passive on) in mein Board geladen und wollte es nun über die Konsole ausführen. Es kommt aber immer nur die Fehlermeldung: "no such file or directory". Die Berechtigung ist mit 777 auf voll hochgeschraubt. Den Namen hab ich in allen drei Varianten angegeben: nur Namen, mit ./ davor und mit der vollständigen Pfadangabe. Selbst wenn ich ein minimales HelloWorld Programm kompiliere und ausführen will kommt die gleiche Fehlermeldung. Ich habe auch schon einen anderen Cross-Compiler getestet mit leider dem gleichen Erfolg. Was also könnte in der Linux Konfiguration oder beim Kompilieren und Übertragen schief gelaufen sein? Habt ihr eine Idee? Gruß Björn
Björn Niethammer schrieb: > ich habe ein kleines C Programm geschrieben welches ich dann mittels GCC > cross kompiliert habe für den ARM Prozessor. Dieses Programm habe ich > dann per FTP (binary mode und passive on) in mein Board geladen und > wollte es nun über die Konsole ausführen. Es kommt aber immer nur die > Fehlermeldung: "no such file or directory". Was sagt denn ein Directory Listing. Siehst du dort das Programm? > Die Berechtigung ist mit 777 > auf voll hochgeschraubt. Daran wirds nicht liegen. Wenn deine Berechtigungen nicht ausreichen, dann sagt er dir das schon. 'no such file or directoy' heißt schlicht und ergreifen genau das: Der Name den du angegeben hast, existiert nicht als ausführbares Programm. Das kann jetzt sein, weil du am falschen Directory bist oder einen Tippfehler im Namen hast oder .... mach ein ls und sieh einfach mal nach ob auf deinem aktuellen Verzeichnis das File liegt, welches du per FTP dort hingeschoben hast.
Den Namen findet er schon. Ich kann ihn auch mit der TAB Taste vervollständigen lassen. Somit ist ein Tippfehler wohl ausgeschlossen. Zum Testen heist das Programm erstmal (ganz originell ;-) ) "bjoern". Immerhin hat dies den Vorteil das ich sehr sicher sein kann das es kein anderes mitgeliefertest Programm mit diesem Namen gibt. Bei einem ls -l sehe ich natürlich auch mein Progranmm. Hochgeladen hab ich es in den Ordner /tmp. Und später dann noch nach /home/root kopiert. In beiden Verzeichnissen kann ich es aber nicht ausführen. Zum kompileren nutze ich arm-linux-gcc bjoern.c -o bjoern. Damit kompiliere ich nun schon seit mehr als einem Jahr auf einem anderen Board und es klappt alles problemlos. Nur jetzt mit dem neuen leider nicht mehr. :-( Ist übrigens das Matrix 504 von Artila. http://www.acceed.de/product.phtml?p=matrix-504-128-lx Nur für das Problem ist das Board denke ich unnwichtig. Scheint ja ein grundlegendes Linux oder GCC Problem zu sein.
Karl heinz Buchegger schrieb: > 'no such file or directoy' heißt schlicht und ergreifen genau das: Der > Name den du angegeben hast, existiert nicht als ausführbares Programm. Naja. Manchmal kann diese Fehlermeldung auch leicht verwirrend sein. Ich vermute mal, das Zielsystem ist ein Linux. Wenn das das Format der ausführbaren Datei nicht erkennt, wird es versuchen, es auf diverse andere Arten zu starten. Eine davon ist das sogenannte `interpreted executable', wird normalerweise durch die Zeile #! /path/to/interpreter eingeleitet. Wenn jetzt /path/to/interpreter nicht existiert, dann gibt das execve() ebenfalls ein ENOENT zurück. Die erste Frage wäre also, wie die Datei auf dem Zielsystem denn genau aussieht...
Eine Zeile mit dem Interpreter habe ich nicht drin stehen. Ist ja ein kompiliertes C Programm und kein bash/Perl/Phyton oder sonstwas Skript. Der Quellcode ist wirklich minimal:
1 | #include <stdio.h> |
2 | |
3 | int main (void){ |
4 | |
5 | printf("Hallo Welt...\n"); |
6 | |
7 | return 0; |
8 | }
|
Kompiliert mit folgendem Aufruf: arm-linux-gcc bjoern.c -o bjoern dann die Datei auf das Zielsystem übertragen und veruscht auszuführen. Was wie gesagt leider nicht klappt. Vom Zielsystemhab ich nicht mehr Informationen als ein ls: root@Matrix504:~# ls -l -rwxrwxrwx 1 root root 12764 Mar 30 09:34 bjoern root@Matrix504:~# Oder kann ich dir noch mehr Informationen darüber geben wie die Datei auf dem Zielsystem ausschaut, Jörg?
Die Meldung erscheint auch wenn eine Library fehlt oder eine falsche Version hat. Ein arm-linux-ldd gibt es wohl nicht, aber Du kannst das auch so prüfen: arm-linux-readelf -d bjoern Dann wird etwas in der Art erscheinen: 0x00000001 (NEEDED) Shared library: [libc.so.6] ... die libc.so.6 muss dann auf den Zielsystem vorhanden und in Such-Pfad sein...
hp-freund schrieb: > Die Meldung erscheint auch wenn eine Library fehlt oder eine falsche > Version hat. Ah... gute Idee. Vielleicht mal mit
1 | arm-linux-gcc bjoern.c -static -o bjoern |
probieren dann.
Super, vielen Dank hp-freund. Dein Hinweis mit den fehlenden Librarys war genau richtig. Mein Kompiler nutzt welche von der uC-Lib und die fehlten in dem Dateisystem. Nun klappt alles. Auch euch beiden Jörg und Karl-Heinz vielen Dank für die schnelle Hilfe und Diagnose. Gruß Björn
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.