MONO crosscompile mit Freetz

clay

Neuer User
Mitglied seit
25 Jun 2007
Beiträge
49
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

vielleicht hat jemand einen Tipp. Ich wollte MONO 3.2.8 mit der Freetz Toolchain unter Debian crosscompilen für mips (Fritzbox 7390).

./configure funktioniert noch einwandfrei aber bei make bekomme ich folgenden Fehler:

os_dep.c:4211:23: fatal error: execinfo.h: No such file or directory


Jetzt hoffe ich, dass jemand eine Idee hat, wie ich dies lösen könnte. Danke!

Clay
 
Dann funktioniert configure doch nicht ganz so einwandfrei, bzw. liefert das falsche Ergebnis. Die Funktionen in execinfo hat die C Library auf der Box nicht.
 
backtrace-Funktionen werden streng genommen ab uClibc-0.9.32, aber in Freetz ab uClibc-0.9.33 unterstützt. D.h. wenn Mono diese unbedingt braucht, musst Du uClibc-0.9.33 in freetz' menuconfig auswählen. Oder wenn diese optional sind, dafür sorgen, dass configure es richtig erkennt (eventuell checkt dieses nur, ob die Headedatei vorhanden ist, jedoch nicht, ob sich ein die backtrace-Funktionen aufrufendes Programm auch linken lässt).
 
ich kann die Einstellungen im menuconfig nicht finden. Es gibt bei mir keine Möglichkeit die uClibc zu verändern. Was mache ich falsch?
 
Bist du "Experte"? Dann findest du den Punkt unter "Toolchain options".
 
Ja ich bin "Experte". Bei mir steht nur 0.9.x ....
 
Gerade nochmal getestet:Toolchain_7390.png
 
Danke, habe gerade nochmal Freetz neu installiert von hier: http://freetz.org/snapshots/ -> 19.AUg

Die einzige verfügbare Version ist 0.9.32. Wie bekomme ich 0.9.33 ??? Danke!
 
Danke - jetzt habe ich die richtige Version.

Hab soeben nochmal versucht mono von den aktuellen sourcen zu kompilieren:

Leider läuft "make" immer noch nicht durch:

make[3]: Entering directory `/home/alex/mono/libgc/doc'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/alex/mono/libgc/doc'
make[3]: Entering directory `/home/alex/mono/libgc'
CC allchblk.lo
gcc: error: unrecognized command line option '-mno-tls-direct-seg-refs'
make[3]: *** [allchblk.lo] Error 1
make[3]: Leaving directory `/home/alex/mono/libgc'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/alex/mono/libgc'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/alex/mono'
make: *** [all] Error 2

Vielleicht gibt es ja hier jemanden, der schonmal Erfolg hatte Mono für die Fritzbox zu kompilieren. Danke!
 
Dann versuche es mal ohne die Option '-mno-tls-direct-seg-refs'. Es kann aber sein, dass diese notwendig ist bzw. nur x86 oder x64 unterstützt wird, dann wird es vermutlich schwierig.

Was hast Du den vor mit MONO?
 
Danke. Die Option wird scheinabr automatisch gesetzt.

Hab es nochmal auf einem anderem System versucht:

CC mono-context.lo
mono-context.c: In function âmono_sigctx_to_monoctxâ:
mono-context.c:47: error: implicit declaration of function âUCONTEXT_REG_EAXâ
mono-context.c:47: warning: nested extern declaration of âUCONTEXT_REG_EAXâ
mono-context.c:48: error: implicit declaration of function âUCONTEXT_REG_EBXâ
mono-context.c:48: warning: nested extern declaration of âUCONTEXT_REG_EBXâ
mono-context.c:49: error: implicit declaration of function âUCONTEXT_REG_ECXâ
mono-context.c:49: warning: nested extern declaration of âUCONTEXT_REG_ECXâ
mono-context.c:50: error: implicit declaration of function âUCONTEXT_REG_EDXâ
mono-context.c:50: warning: nested extern declaration of âUCONTEXT_REG_EDXâ
mono-context.c:51: error: implicit declaration of function âUCONTEXT_REG_EBPâ
mono-context.c:51: warning: nested extern declaration of âUCONTEXT_REG_EBPâ
mono-context.c:52: error: implicit declaration of function âUCONTEXT_REG_ESPâ
mono-context.c:52: warning: nested extern declaration of âUCONTEXT_REG_ESPâ
mono-context.c:53: error: implicit declaration of function âUCONTEXT_REG_ESIâ
mono-context.c:53: warning: nested extern declaration of âUCONTEXT_REG_ESIâ
mono-context.c:54: error: implicit declaration of function âUCONTEXT_REG_EDIâ
mono-context.c:54: warning: nested extern declaration of âUCONTEXT_REG_EDIâ
mono-context.c:55: error: implicit declaration of function âUCONTEXT_REG_EIPâ
mono-context.c:55: warning: nested extern declaration of âUCONTEXT_REG_EIPâ
mono-context.c: In function âmono_monoctx_to_sigctxâ:
mono-context.c:79: error: lvalue required as left operand of assignment
mono-context.c:80: error: lvalue required as left operand of assignment
mono-context.c:81: error: lvalue required as left operand of assignment
mono-context.c:82: error: lvalue required as left operand of assignment
mono-context.c:83: error: lvalue required as left operand of assignment
mono-context.c:84: error: lvalue required as left operand of assignment
mono-context.c:85: error: lvalue required as left operand of assignment
mono-context.c:86: error: lvalue required as left operand of assignment
mono-context.c:87: error: lvalue required as left operand of assignment
make[4]: *** [mono-context.lo] Fehler 1

Mono ist quasi das .NET Framework für Linux, d.h. es können C# Programme (Consolen Applikationen) direkt auf der Fritzbox ausgeführt werden. Das Ganze funktioniert ohne Probleme auf dem Raspberry Pi, also dachte ich, dass man es doch auch auf der Fritzbox zum Laufen bringen könnte...
Vorteil: Viele meiner C# Bibliotheken, die heute schon auf Windows oder Raspberry Pi funktionieren, könnte ich direkt auf der Fritzbox einsetzen...

Bin ich wirklich der einzige, der auf diese Idee kommt? keine C# Entwickler hier?
 
Mono ist quasi das .NET Framework für Linux, d.h. es können C# Programme (Consolen Applikationen) direkt auf der Fritzbox ausgeführt werden. Das Ganze funktioniert ohne Probleme auf dem Raspberry Pi, also dachte ich, dass man es doch auch auf der Fritzbox zum Laufen bringen könnte...

Ich weiß, was Mono ist, die Frage war, wofür es gut ist.

Hast Du es für einen Raspberry Pi übersetzt, oder ist dort ein fertiges Mono dabei? Sieht aus, als wäre Mono doch sehr Hardware spezifisch. Vielleicht ist es auch nicht für einen Cross Compiler ausgelegt, es wäre nicht das erste Programm, bei dem das so ist.
 
Danke für die Antwort. Wie gesagt, ich würde gerne meine vorhandenen Programme direkt auf der Fritzbox ausführen, deshalb Mono...

Auf dem Raspberry PI habe ich es direkt auf dem Raspberry kompiliert. Allerdings habe ich MONO bereits für ein anderes ARM Board auf einer X86 Hardware crosscompiled...
Prinzipiell müsste es also funktionieren. Auch MIPS sollte theoretisch klappen...

Gibt es die Möglichkeit direkt auf der Fritzbox zu kompilieren?
 
Ich hab es spaßeshalber gerade mal versucht. Neuer checkout in "/run/shm/freetz-devel", darin im "make menuconfig" die 7390 gewählt und verlassen. Mono entpackt und einmal "make dropbear-precompiled" aufgerufen, um die configure-Optionen "rauszukopieren". Das lief bei mir viel weiter durch (mag sein, dass einiges "zu viel" ist, weil halt vom dropbear "geklaut" ;-)), in "scripts" kamen dann einige Fehler, denen ich nicht weiter nachgegangen bin :
Code:
./configure PATH="/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin:/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3/mips-unknown-linux-gnu/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" CC="/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc" CXX="/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-g++-wrapper" CFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" CXXFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" LDFLAGS=""  --cache-file=/run/shm/freetz-devel/source/target-mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/config.cache --target=mips-linux --host=mips-linux --build=x86_64-pc-linux-gnu --program-prefix=""

make PATH="/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin:/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3/mips-unknown-linux-gnu/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" CC="/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc" CXX="/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-g++-wrapper" CFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" CXXFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" LDFLAGS=""



#
# das dauert etwas ;-)
#

joerg@joerg-Ubuntu:/run/shm/freetz-devel/mono-3.4.0$ file mono/mini/mono
mono/mini/mono: symbolic link to `mono-sgen'
joerg@joerg-Ubuntu:/run/shm/freetz-devel/mono-3.4.0$ file mono/mini/mono-sgen 
mono/mini/mono-sgen: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, not stripped
joerg@joerg-Ubuntu:/run/shm/freetz-devel/mono-3.4.0$

EDIT: Sehe gerade, du hattest 3.2.8 versucht, ich 3.4.0 ...
EDIT2: ... 3.2.8 läuft noch, ist aber auch schon weit "über deinen Fehler hinweg" ...
 
Zuletzt bearbeitet:
Interessant - Vielen Dank:

würdest Du bitter die Option "--disable-mcs-build" beim configure hinzufügen. Dies wird beim crosscompiling zwingend benötigt und nochmal laufen lassen. Danke!

Ich denke ich werde mein Linux (Debian) komplett neu aufsetzen. Vielleicht probiere ich es mal unter Ubuntu.... Habe keine Ahnung warum es bei mir abbricht, aber ich habe schon sooo viel probiert, dass wahrscheinlich ein Neuanfang nicht schaden kann..

Nein mittlerweile habe ich auch Version 3.4 probiert... Der erste Post ist ja schon eine Weile her. Mittlerweile habe ich ziemlich viele Versuche unternommen...

Gib Bitte Bescheid, ob es bei Dir klappt! Vielen Dank!

Mit Deinen configure Optionen läuft es jetzt schon einige Zeit - Bin zuversichtlich...

Nochmal zum Verständnis: Wir genau hast Du die configure Optionen rausbekommen?

Was genau macht make dropbear-precompiled??? Würde mich freuen, wenn ich heute noch was lernen könnte? Danke!

Einen Schritt bin ich weiter gekommen. make ist durchgelaufen. Aber make install klappt noch nicht:

libtool: install: /usr/bin/install -c .libs/libmonoboehm-2.0.a /home/alex/monobuild34/lib/libmonoboehm-2.0.a
libtool: install: chmod 644 /home/alex/monobuild34/lib/libmonoboehm-2.0.a
libtool: install: mips-linux-ranlib /home/alex/monobuild34/lib/libmonoboehm-2.0.a
/home/alex/freetz/mono-3.4.0/mono/mini/../../libtool: line 1102: mips-linux-ranlib: command not found
make[4]: *** [install-libLTLIBRARIES] Error 127
make[4]: Leaving directory `/home/alex/freetz/mono-3.4.0/mono/mini'


Ist hier noch ein Profi mit einer Idee?
 
Zuletzt bearbeitet von einem Moderator:
Weiß nicht, ob die Optionen dafür reichen, du müsstest dem "install" ja noch die Pfade mitgeben, wohin installiert werden muss.

Für das "ranlib" reichte es, dem "make install" wie oben die Pfade mitzugeben (mips-linux-ranlib liegt ja im Pfad "/run/shm/freetz-devel/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin").

Kopiere die Libs und Programme lieber gleich per Hand (oder schau nach, wie du dem "make install" die Pfade mitgibst).

Zuletzt: Bitte nicht in so kurzer Zeit auf eigene Beiträge "antworten", sondern die "Bearbeiten" Funktion nutzen!
 
OK - Danke erstmal. Ich werde es versuchen.

Würdest Du mir bitte noch ganz kurz erklären, wie Du auf die ganzen Parameter für configure und make gekommen bist?
 
Wie geschrieben: Ich habe "make dropbear-precompiled" gestartet (fiel mir gerade ein, könnte sicher auch ein anderes Programm sein) und habe die von Freetz genutzten Einstellungen (die dann ja beim Bauen angezeigt werden) übernommen.
Das Ganze macht halt sonst freetz, wenn du selbst cross-compilen willst, musst du das selbst machen (Compiler vorgeben, Pfade setzen und ggf. noch andere Parameter).

Wenn ich mir deine Fehlermeldungen so ansehe ("gcc: error: unrecognized command line option '-mno-tls-direct-seg-refs'") frage ich mich, ob du z.B. überhaupt den Compiler auf den Mips-Gcc (CC=...) gesetzt hattest.
Hast du dich dabei an der Anleitung dazu auf der Freetz Seite orientiert?
 
Zuletzt bearbeitet:
Vielen Dank nochmal für Deine Hilfe.

ich habe jetzt nochmal ganz von vorne angefangen:

Ubuntu neu aufgesetzt
System auf den neuesten Stand gebracht
Zuerst MONO mit X86 Compiler compiliert, um zu sehen, ob es grundsätzlich klappt
Dann mit Deinen Optionen für MIPS kompiliert

-> musste noch eine Datei per Hand kopieren, die im tarball von MONO fehlte, aber danach ist alles durchgelaufen

-> Die Freude war von kurzer Dauer: Hello World funktioniert noch, aber sobald mit Typen wie z.B.: DateTime etc. gearbeitet wird hagelt es Fehler. Das ist aber eine MONO interne Geschichte, die ich und wahrscheinlich keiner hier lösen kann. Schade! oder gibt es andere compileroptionen, die das Verhalten von Long, Int, Double, usw. beinflussen könnten?

Trotzdem Danke nochmal!
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,868
Beiträge
2,219,771
Mitglieder
371,585
Neuestes Mitglied
PauSchmitz
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.