nodejs kompilieren - ELF file data encoding not little-endian

ahooge

Neuer User
Mitglied seit
6 Feb 2005
Beiträge
99
Punkte für Reaktionen
0
Punkte
0
Hallo Forum,

ich habe folgendes Problem:

Ich habe vor, nachdem ich die ersten Versuche mit Freetz erfolgreich hinter mich gebracht habe, nodejs für Freetz zu kompilieren (Eigentliches Ziel ist, CCU.IO zum Laufen zu bekommen),
Ich habe nicht viel Ahnung von Linux, kompilieren und so. Ich bin einfach nach den HowTos für das Erstellen des ToolChains vorgegangen und habe mit dann das httptunnel Beispiel geschnappt. An der Stelle wo ich

./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux

ausführe, bekomme ich dann folgende Fehlermeldung:

ImportError: /home/freetz/freetz/trunk/toolchain/target/lib/python2.7/lib-dynload/_collections.so: ELF file data encoding not little-endian

Mit Traceback:
Code:
Traceback (most recent call last):
  File "./configure", line 6, in <module>
    import shlex
  File "/home/freetz/freetz/trunk/toolchain/target/lib/python2.7/shlex.py", line 12, in <module>
    from collections import deque
  File "/home/freetz/freetz/trunk/toolchain/target/lib/python2.7/collections.py", line 8, in <module>
    from _collections import deque, defaultdict
ImportError: /home/freetz/freetz/trunk/toolchain/target/lib/python2.7/lib-dynload/_collections.so: ELF file data encoding not little-endian

Da weiß ich jetzt nichts mit anzufangen. Habe ich eine falsche Version von irgendwas? Ist NodeJs oder python schlicht nicht kompatibel?
Kann mir da jemand einen Tipp geben?

Vielen Dank im Voraus
Viele Grüße
ahooge
 
Moin

MIPSEL sind die 71XXer Boxen.
MIPS sind die 73XXer Boxen.

Und welche Box hast du?
 
Hi,

oh. Das habe ich wohl überlesen. Ich habe tatsächlich die 7362SL

Dann müsste ich praktisch

./configure --build=i386-linux-gnu --target=mips-linux --host=mips-linux

schreiben?

VG
ahooge
 
Hi,

nö. Meine Vermutung war falsch. Der gleiche Fehler tritt auf, wenn ich das Tutorial folgendermaßen abändere:

export CC="mips-linux-gcc"
./configure --build=i386-linux-gnu --target=mips-linux --host=mips-linux

Aber vielleicht ist das auch zu einfach gedacht. Weiß jemand, wie der Befehl dann korrekterweise lauten muss?

Viele Grüße
ahooge
 
Du kannst noch versuchen, host auf i386-linux-gnu zu setzen.
Es ist aber auch möglich, dass das Cross Compilieren einfach nicht unterstützt wird. Speziell wenn der Build Prozess Programme erstellt, die auf dem Host laufen müssen, ist das nicht so einfach.
Mit
Code:
file /home/freetz/freetz/trunk/toolchain/target/lib/python2.7/lib-dynload/_collections.so
kannst Du herausfinden, was für eine Datei da erstellt wurde. Speziell beim ersten Versuch mit MIPSEL gibt es eigentlich keinen Grund, warum eine Datei herauskommen soll, die nicht little-endian ist. Daher kann es auch sein, dass die Meldung etwas anderes bedeutet, als sie aussagt. Was ist denn der genau Test, der zu dieser Meldung führt?
 
Hi,

die Ausgabe von dem file Befehl ist folgende:
Code:
/home/freetz/freetz/trunk/toolchain/target/lib/python2.7/lib-dynload/_collections.so: ELF 32-bit MSB shared object, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, stripped
Da steht etwas von MIPS, was lt. Wikipedia ja Big Endian bedeuten müsste. Ich frage mich also eher, warum erwartet der überhaupt Little Endian? Ich will ja auch mit MIPS kompilieren. Die Angabe --host hat auch nichts gebracht.

Die Datei existiert ja auch schon. Python scheint auf meiner BOX auch zu funktionieren. Beim Kompilieren von nodejs wird die Datei aber wohl benötigt. Und dann kommt der Fehler.
Durchgeführt habe ich:
Code:
cd /home/freetz/trunk/
mkdir nodejs
cd nodejs
wget http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz
tar xfz node-v0.10.29.tar.gz
cd node-v0.10.29
export CC="mips-linux-gcc"
export PATH=/home/freetz/trunk/toolchain/target/bin/:$PATH
./configure --build=i386-linux-gnu --target=mips-linux --host=mips-linux --host=i386-linux-gnu

Dann kommt der Fehler.

Viele Grüße
ahooge
 
Jetzt als MIPS ist die Datei Big Endian. Im ersten Versuch hattest Du aber noch mipsel-linux und da hatte die Datei keinen Grund, Big Endian zu sein.

Da die Datei aber auf dem Host ausgeführt werden soll, muss sie nicht nur little-endian sein, sondern auch zum Host passen, und das tut eine MIPS Datei nicht, unabhängig ob big oder little endian.

Lösche mal das Verzeichnis node-v0.10.29 komplett und versuch dann nochmal configure ohne die Zeile CC="mips-linux-gcc".
Vielleicht ist das Problem aber auch die Reihenfolge im PATH. Versuche es dort mal mit PATH=$PATH:/home/freetz/trunk/toolchain/target/bin
 
Hi,

erstmal vielen Dank für die Hilfe bis hier. Also ob ich CC setze oder nicht, scheint keinen Unterschied zu machen.
Wenn ich den PATH umdrehe, bekomme ich die Meldung:

Usage: configure [options]

configure: error: no such option: --build

Scheinbar nimmt der dort dann andere Binaries. Ich bekomme solche Meldungen solange, bis ich ./configure ohne Parameter aufrufe,. Und dann findet er keinen Compiler.

Weitere Ideen?

Viele Grüße
ahooge
 
Hmm. Das ist interessant. Die Fehlermeldung sagt ja bei "import _collections.so" den Fehler mit dem Endian. Ich habe mir nun mal das configure Skript angesehen (Ist ein Python Skript) und dort stehen ganz oben einige Imports. Hier habe ich ein paar Debug-Ausgaben ergänzt und nochmal ausgeführt...

Code:
#!/usr/bin/env python
print "1";
import optparse
print "2";
import os
print "3";
import pprint
print "4";
import re
print "5";
import shlex
print "6";
import subprocess
print "7";
import sys
....

Bei der Ausführung kommt er bis "5" und dann folgt der Fehler. Wenn ich import shlex auskommentiere, kommt er bis 6 und dann folgt der Fehler usw. (Nur dann in einer andere Datei). Scheinbar kommt also Python mit seinen mitgebrachten Libraries nicht klar.
Jetzt aber das interessante: Ich habe mir ein Testskript erstellt, in das ich genau die oben stehenden Zeilen reinkopiert habe. Das Skript kann ich dann Fehlerfrei ausführen. Das finde ich seltsam, denn im configure Skript stehen ja nur noch weitere Codezeilen, die gar nicht mehr ausgeführt wurden.!?!?

Fällt da jemand etwas zu ein? Im Moment sieht es jedenfalls für mich so aus, als hätte das noch nichts mit den nodejs sourcen zu tun.

Viele Grüße
ahooge

edit: und nochwas fällt auf:
Code:
 file /usr/bin/python2.7
/usr/bin/python2.7: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xfa1cb940bb2d8b68853520b3a90f31ed38aacd31, stripped

bei der collections.so stand ja was von "MIPS". Bei der python Binary steht Intel 80386. Ist die evtl. für das falsche System kompiliert? Ich habe python aber über make menuconfig hinzugefügt.
 
Zuletzt bearbeitet:
Hast Du den Vorschlag mit dem PATH mal ausprobiert?
Es ist offensichtlich, dass Python auf dem Host System ausgeführt wird, aber versucht, Dateien zu laden, die für das Zielsystem erstellt wurden.

Die andere Frage ist, ob es überhaupt viel bringt, ein configure laufen zu lassen, dass den Host prüft und nicht das Zielsystem. Evtl. kann man dem configure die Werte vorgeben, statt diese automatisch ermitteln zu lassen.
 
Ja, wenn ich den Path so verwende, wie in Deinem Vorschlag bekomme ich die Fehlermeldung:

configure: error: no such option: --build

Wenn ich --build weglasse, meckert er --target an usw. Solange bis alle Parameter weg sind. Und dann findet er keinen Compiler, wenn ich nun noch ./configure stehen habe.

VG
ahooge

Edit: Und wenn ich mal versuche:
../../toolchain/target/bin/python configure

um python aus dem toolchain zu verwendet kommt auch der Fehler mit dem little Endian.
 
Aha. Mit

/usr/bin/python2.7 configure

bekomme ich die Meldung nicht. Allerding sagt er dann wieder:

Node.js configure error: No acceptable C compiler found!


VG
ahooge
 
Ich hoffe ich spamme hier nicht, aber wenn ich etwas finde, ergänze ich das hier einfach mal :)

Mit export CC="mips-linuc-gcc"

und dann /usr/bin/python2.7 configure gabs keinen Fehler. Jetzt werde ich aber nodejs vermutlich für das Host System, also freetz kompilieren :)
 
Ok, jetzt habe ich es konkret mit dem Compiler aus freetz probiert:

../../tools/build/usr/bin/python configure

Das lief durch. Danach arbeitet auch "make" eine ganze Weile und endet dann mit dem Fehler:

Code:
Traceback (most recent call last):
  File "../../tools/js2c.py", line 36, in <module>
    import bz2
ImportError: No module named bz2
make[1]: *** [/home/freetz/freetz/trunk/nodejs/node-v0.10.29/out/Release/obj/gen/libraries.cc] Fehler 1
make[1]: Verlasse Verzeichnis '/home/freetz/freetz/trunk/nodejs/node-v0.10.29/out'
make: *** [node] Fehler 2

Das Paket bz2 konnte ich nirgends finden (Also auf dem System und in menuconfig). Jetzt weiß ich wieder nicht weiter.
Kann man das nachinstallieren?

VG
ahooge
 
Hi,

so, dass fehlende bz2 habe ich aus dem System nochmal rüberkopiert. Jetzt bekomme ich aber eine Menge Compiler-Fehler.
Es endet mit:

Code:
ic.cc:(.text._ZN2v88internal2IC18SetTargetAtAddressEPhPNS0_4CodeE[v8::internal::IC::SetTargetAtAddress(unsigned char*, v8::internal::Code*)]+0x3d): undefined reference to `v8::internal::CPU::FlushICache(void*, unsigned int)'
collect2: ld gab 1 als Ende-Status zurück
make[1]: *** [/home/freetz/freetz/trunk/nodejs/node-v0.10.29/out/Release/mksnapshot] Fehler 1
make[1]: Verlasse Verzeichnis '/home/freetz/freetz/trunk/nodejs/node-v0.10.29/out'
make: *** [node] Fehler 2

Vorher noch einige andere "undefined reference" Fehler. Das ist jetzt der Punkt, an dem ich wohl aufgeben muss. Vielleicht geht das ja tatsächlich nicht mit nodejs. Oder ich weiß einfach nicht, wie. Jedenfalls fällt mir nichts mehr ein.

VG
ahooge
 
Jetzt habe ich auch den Grund gefunden: Bei openwrt hat das jemand ans Laufen bekommen (https://forum.openwrt.org/viewtopic.php?id=34410)
Es liegt wohl daran, dass die mitgebrachte V8 Javascript Engine schon gar nicht für die Boxen kompatibel ist.
openwrt benutzt wohl eine für MIPS portierte Version.

Vielleicht braucht ja irgendwann mal jemand nodejs auf freetz, der die Fähigkeit hat, das zu portieren :)

Viele Grüße
ahooge
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.