Ubuntu test.o file not found

OP #1512190
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
#1512204
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
Gast #1512228
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 
:-)
Gast #1512262
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
Gast #1512283
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
Gast #1512350
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
Gast #1512419
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
OP #1512807
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren