Forum: Mikrocontroller und Digitale Elektronik Ubuntu test.o file not found


von Bernd S. (mms)


Lesenswert?

Hi,

hab grad unter Ubuntu ein einfaches cprog mit arm-linux-gcc-3.4.1 
erstellt und dieses auf einen µC mit embedded Linux portiert und wollte 
es dort ausführen ./test.o datei -> allerdings bekamm ich immer die 
Fehlermeldung -sh ./test.o not found...

Kann man jmd auf die Sprünge helfen, warum diese Datei (die auf jeden 
Fall da ist und auch die entsprechenden Rechte chmod 777 besitzt) als 
nicht vorhanden deklariert wird?

Gruß
Bernd

von Gast (Gast) (Gast)


Lesenswert?

> -sh ./test.o not found

Was für ein Format hat test.o denn? Das hört sich so verdächtig nach 
Objektdatei an (also nicht ausführbar gelinkt).

HTH

von David M. (md2k7)


Lesenswert?

Hallo!

Dass eine nicht ausführbare Datei unter einem embedded Linux als 'not 
found' tituliert wird, habe ich auch schon mal erlebt.

Als Tipp würd ich mal sagen, eine .o Datei ist üblicherweise eine 
Objektdatei, die nicht gelinkt und deswegen so nicht lauffähig ist. Zum 
Ausführen brauchst du z.B. eine ELF-Binary.

Gruß
David

von Falk (Gast)


Lesenswert?

test.o klingt nicht nach einer ausführbaren Datei.
Was sagt "file test.o"?
Wie hast Du die Datei kompiliert?
Gibt es auch eine Datei namens "test"?

Gruß,
Falk

von Gastino G. (gastino)


Lesenswert?

Richtig, *.o sind Objektdateilen, die aus dem Compiler fallen und vom 
Linker zu einer ausführbaren Datei zusammengelinkt werden.

von Gast (Gast) (Gast)


Lesenswert?

> Richtig, *.o sind Objektdateilen, die aus dem Compiler fallen und vom
> Linker zu einer ausführbaren Datei zusammengelinkt werden.

Da fehlt ein "in der Regel, Klarheit liefert 'file'" </klugsch****>

Einfachst nachvollziehbares Gegenbeispiel:

$ echo 'int main() { return 0; }' > test.c ; echo ; gcc -Wall test.c -o 
test.o ; file test.o ; rm test.o ; echo ; gcc -Wall test.c -c -o test.o 
; file test.o

test.o: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically 
linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

test.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not 
stripped

Ersteres ist ausführbar (hier: amd64, auf anderen Architekturen analog), 
zweiteres (nur) eine Objektdatei - der Dateiname ist völlig unerheblich 
:-)

von Bernd Schuster (Gast)


Lesenswert?

gelinkt bzw. erstellt habe ich Datei so:

arm-linux-gccc-3.4.1 -o text.o text.c  -> wie kann ich daraus eine .elf 
Datei erzeugen?

oder reicht es wenn ich arm-linux-gccc-3.4.1 test.c -Wall -o test
schreibe?

Bernd

von Bernd Schuster (Gast)


Lesenswert?

btw: kann es auch probleme geben, wenn die Kernel nicht genau 
übereinstimmen? Linux 2.6 und Linx 2.4 z.B?

von Gast (Gast) (Gast) (Gast)


Lesenswert?

> btw: kann es auch probleme geben, wenn die Kernel nicht genau
> übereinstimmen? Linux 2.6 und Linx 2.4 z.B?

Dein Crosscompiler (bzw. die binutils und die libraries) sollten zum 
Zielsystem passen, der Rest ist (weitgehend) egal. Machmal ein 'file 
test.o', nur so wirst Du rausbekommen, was es tatsächlich ist. Falls es 
executable ist (und zum Zielstem passt), dann sollte es dort auch 
ausführbar sein, dann müsstest du dort weitersuchen.

HTH

von Gastino G. (gastino)


Lesenswert?

Gast (Gast) schrieb:
> Einfachst nachvollziehbares Gegenbeispiel:

Ich gehe mal davon aus, dass er nicht mutwillig Unsinn getrieben hat.

von tomm (Gast)


Lesenswert?

> Fehlermeldung -sh ./test.o not found...

Entweder ist test.o keine Executable (was sagt "file test.o"?)
oder
es fehlen shared objects (was sagt "ldd test.o"?)
oder
du hast das falsche Terminal erwischt (biste auf der richtigen Kiste?;)


Gruss
./t

von Bernd Schuster (Gast)


Lesenswert?

ausprobieren kann ich es erst morgn wieder: aber erstellt wurde das file 
auf einem ubuntu server system und laufen soll es auf einem embedded 
linux 2.6 kernel (arm controller).

./test.o ist auf jeden  Fall auf dem Unbuntu System ausführbar bzw. das 
c-Prog wird gestartet und auch ausgeführt.

Gruß
Bernd

von Bernd S. (mms)


Lesenswert?

file test.o liefert auf Ubuntu:

test.o: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically
linked (uses shared libs), for GNU/Linux 2.4.3, not stripped

und ldd test.o liefert:
"not a dynamic executable"

wo müsste ich jetzt weiterschauen um das Problem zu finden bzw. zu 
lösen?

Gruß
Bernd

von Bernd S. (mms)


Lesenswert?

muss auf dem embedded linux auch irgendwas installiert sein, damit es 
funktionieren kann (z.B: eine Version von gcc)???

Bernd

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.