www.mikrocontroller.net

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


Autor: Björn Niethammer (bniethammer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Björn Niethammer (bniethammer)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Björn Niethammer (bniethammer)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <stdio.h>

int main (void){

  printf("Hallo Welt...\n");

  return 0;
}

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?

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hp-freund schrieb:
> Die Meldung erscheint auch wenn eine Library fehlt oder eine falsche
> Version hat.

Ah... gute Idee.

Vielleicht mal mit
arm-linux-gcc bjoern.c -static -o bjoern

probieren dann.

Autor: Björn Niethammer (bniethammer)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.