Forum: Compiler & IDEs C Programm kann nicht per Konsole ausgeführt werden


von Björn N. (bniethammer)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Björn N. (bniethammer)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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...

von Björn N. (bniethammer)


Lesenswert?

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?

von hp-freund (Gast)


Lesenswert?

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...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Björn N. (bniethammer)


Lesenswert?

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
Noch kein Account? Hier anmelden.