MONO crosscompile mit Freetz

Danke!
Ich denke zwar, dass diese Parameter das Kompilat nicht beeinflussen, aber ein Versuch ist es wert..

Nachtrag: Die zusätzlichen Parameter beim kompilieren haben nichts gebracht. So wie es scheint hat Mono Probleme mit long (int64) Variablen auf der MIPS Platform.

z.B. int32.max + 1L ergibt -2147483648. Eigentlich solle aber ein positiver Long Wert herauskommen. Dieses Problem in den MONO Sourcen auf den Grund zu gehen übersteigt meine Fähigkeiten - Leider...
 
Zuletzt bearbeitet:
Hallo,

ich greife das Thema noch mal auf. Ich habe mal versuch den Thread nachzuvollziehen, aber leider läuft bei mir make nicht durch:

Code:
../../doltcompile mips-linux-gcc -DHAVE_CONFIG_H -I. -I../..  -I../../eglib/src -I../../eglib/src -I../../libgc/include -DMONO_BINDIR=\""/home/neo/data/freetz-trunk/toolchain/target/usr/bin"\" -I../..	 -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP  -DNO_UNALIGNED_ACCESS  -march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing -Wdeclaration-after-statement -Wno-unused-but-set-variable -g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Werror-implicit-function-declaration -MT wthreads.lo -MD -MP -MF $depbase.Tpo -c -o wthreads.lo wthreads.c &&\
mv -f $depbase.Tpo $depbase.Plo
wthreads.c: In function 'SleepEx':
wthreads.c:277:3: error: implicit declaration of function 'clock_nanosleep' [-Werror=implicit-function-declaration]
wthreads.c:277:3: warning: nested extern declaration of 'clock_nanosleep' [-Wnested-externs]
Unrecht hat er ja nicht in der sys\time.h ist die Funktion nicht deklariert. Sondern in der time.h!

Ich musste schon die gc.h ändern um so weit zu kommen. War es bei euch auch so?
 
Genau das meinte ich in dem Nachsatz.
Ich hatte es nicht gegen die uCLibu 0.9.33.2 zu erstellt.
Das ist gelungen.
Nun habe ich versucht eine .net Anwendung zu für die Box zu erstellen. Das klappt schon. Leider ist aber nun auf der Box die falsche uCLib.
Dadurch erhalte ich wohl diese Meldung: ./hallo: can't resolve symbol 'pthread_getattr_np' in lib './hallo'. :(

Beim Erstellen erhalte ich folgende Warnung:
Code:
/home/neo/data/freetz-trunk2/trunk/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.7.3/../../../../mips-linux-uclib/bin/ld: temp.o: warning: linking abicalls files with non-abicalls files
 
Zuletzt bearbeitet:
Ich habe nicht versucht, Mono zu übersetzen, erst recht nicht für eine Fritz Box. Ich wollte damit nur sagen, dass es ein Fehler in Mono ist, sys/time.h statt time.h zu verwenden. Auch sonst ist in Mono einiges daneben, ober zumindest nicht für einen Cross-Compiler ausgelegt.

Beim Erstellen von Mono solltest Du die gleichen Optionen verwenden, die auch für alle anderen Programme verwendet werden, und die Meldung oben sieht danach aus, als würde libpthread fehlen.
 
Scheint auch nicht so einfach. Wäre aber schon wenn es gehen würde.

Das mit den Optionen hab ich beachtet und das "Monster" lies sich fehlerfrei erzeugen.

Ins Image wollte ich das Ergebnis nicht integrieren, sondern nur mkbundle verwenden, um Assemblies zu übersetzen.

Unter /lib ist libpthread vorhanden. Deswegen bin ich ein wenig verwirrt. Ich hab nun aber keine Idee mehr wie ich weiter vorgehen soll?


Wer interessiert ist, configure:
Code:
export CC="mips-linux-gcc"
export CXX="mips-linux-g++-wrapper"
export CFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
export CXXFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
export LDFLAGS="-static"

./configure --target=mips-linux \
    --host=mips-linux \
    --build=i386-linux-gnu \
    --prefix=$TOOLCHAIN/target/usr \
    --without-mcs-docs \
    --disable-mcs-build \
    --with-tls=pthread \
    --with-sigaltstack=no \
    --with-profile4_5=yes
 
Zur Info.

Ich konnte die mono 3.4 version (http://download.mono-project.com/sources/mono/) wie folgt kompilieren:

1. neueste Freetz version auf ubuntu
2. Fritzbox 7390
3. ./configure PATH="/home/alex/freetz/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin:/home/alex/freetz/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="/home/alex/freetz/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc" CXX="/home/alex/freetz/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=/home/alex/freetz/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=""

4. make PATH="/home/alex/freetz/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin:/home/alex/freetz/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="/home/alex/freetz/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc" CXX="/home/alex/freetz/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=""

Leider gibt es Probleme mit dem Datentyp long.(siehe weiter oben im Thread) weiter habe ich nicht recherchiert, da das Problem wahrscheinlich nicht so einfach lösbar ist...
 
Leider gibt es Probleme mit dem Datentyp long.(siehe weiter oben im Thread) weiter habe ich nicht recherchiert, da das Problem wahrscheinlich nicht so einfach lösbar ist...
Genau das wollte ich mir mal anschauen. Von der Leistung her müsste es ja meine 7490 mono Anwendungen ausführen können. Und der Prozessor wird glaub ich auch unterstützt.

@clay: Also die configure und make optionen haben wir schon mal gleich.

Danach versuche ich mit dem erstellten, ein Datei zu übersetzen
Code:
export PATH="$TOOLCHAIN/target/bin:$PATH" 
export PKG_CONFIG_PATH="$TOOLCHAIN/target/lib/pkgconfig"
export CFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
export CXXFLAGS="-march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
#export LDFLAGS="-static"
export CC="mips-linux-gcc"
export AS="mips-linux-as"
mkbundle --static --deps $1

Ausgabe:
Code:
OS is: Linux
Note that statically linking the LGPL Mono runtime has more licensing restrictions than dynamically linking.
See http://www.mono-project.com/Licensing for details on licensing.
Sources: 1 Auto-dependencies: True
   embedding: /home/neo/data/mono/cross/TestMono.exe
   embedding: /usr/lib/mono/4.5/mscorlib.dll
Compiling:
mips-linux-as -o temp.o temp.s 
mips-linux-gcc -o a.out -Wall `pkg-config --cflags mono-2` temp.c  `pkg-config --libs-only-L mono-2` -Wl,-Bstatic -lmono-2.0 -Wl,-Bdynamic `pkg-config --libs-only-l mono-2 | sed -e "s/\-lmono-2.0 //"` temp.o
/home/neo/data/freetz-trunk2/trunk/toolchain/build/mips_gcc-4.7.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/../lib/gcc/mips-linux-uclibc/4.7.3/../../../../mips-linux-uclibc/bin/ld: temp.o: warning: linking abicalls files with non-abicalls files
Done

pkg-config --libs-only-L mono-2:
Code:
-D_REENTRANT -I/home/neo/data/freetz-trunk2/trunk/toolchain/target/lib/pkgconfig/../../include/mono-2.0 -L/home/neo/data/freetz-trunk2/trunk/toolchain/target/lib/pkgconfig/../../lib -Wl,--export-dynamic -lmono-2.0 -lm -lrt -ldl -lpthread
pkg-config --libs-only-l mono-2 | sed -e "s/\-lmono-2.0 //":
Code:
-lm -lrt -ldl -lpthread
@RalfFriedl:

Damit sollte pthread auch angegeben sein?

Gruß
 
Den Post #22 hab ich gelesen, ich wollte nur mal nachvollziehen wie es dazu kommt.

Denn meiner bescheidenen Meinung nach ist es schon interessant, sowas wie mono zum Laufen zu bringen. Theoretisch sollte es ja gehen. Deswegen wollte ich noch mal einen zweiten Blick darauf werfen.

Dazu wollte ich erstmal den selben Fehler erzeugen und mich danach mit den Debugging beschäftigen.
 
schau es Dir bitte an. Vielleicht bekommst Du es zum Laufen. Die Hardwareleistung reicht locker...

zur Info wie ich es zum Laufen bekommen habe (leider mit den beschriebenen Problemen mit long):

ich habe mono wie open beschrieben kompiliert. Nach dem kompilieren entsteht aber nun der native Teil des MONO Frameworks,d.h. man muss außerdem MONO auch auf dem Host kompilieren und dann die managed Komponenten (dlls) auf die Box in die entsprechenden Verzeichnisse rüberkopieren (z.B. auf den Flash Speicher)... Danach kann man mit Visual Studio eine Applikation erstellen, dann auf die Box kopieren und z.B. die Konsolenappliaktion mit "mono ConsoleApplication1.exe" starten...
 
Naja, den nativen Teil hab ich nicht auf die Box installiert, sondern nur in die Toolchain. Damit wollte ich der Box erstmal das jit-ten ersparen, und das lieber via cross compile erledigen.
Ich werde mal schauen müssen was die Warnung beim kompilieren der .net exe bedeuten. Ich hoffe mal das ist der Schlüssel. Bis jetzt hab ich noch nichts brauchbares gefunden.
Sonst werde ich mal wie du das Teil komplett auf die Box bringen.
 
So, ich hab es geschafft eine Test-Anwendung zu übersetzen. Sogar ohne mono zu installieren. Wer interessiert ist, dem kann ich ja mal meine fürchterlichen Skripte geben :).

Zum Problem:
Sehr interessant
Code:
int i = 1;
long a = i + 2L; // wird zu 0x300000000
long b = i + 0x100000000L; // 0x300000001
Ich würde mal sagen Little Endian funktioniert ;).

Prinzipiell wird folgendes gemacht alle i8 Operation werden in i4 Operation konvertiert.

Sieht man schön an diesem i-set:
Code:
>> i8const --i8 gefunden, wird aber nicht verarbeitet
>> iconst -- wie von sauberhand erscheinen zwei iconst
>> iconst
Ich/man müsste mal raus finden wie das funktioniert.

Vielleicht hat jemand eine Idee?
 
Bei dem Beispiel mit b ist mri zwar nicht ganz klar, warum dort 0x300000001 herauskommt und nicht 2, aber generell sieht es so aus, als hätte Mono das Little Endian vom Build System übernommen, statt von Zielsystem. Es kann auch sein, dass sich Mono am Vorbild von Microsoft orientiert und nur mit Little Endian getestet wurde.
 
zu dem Ergebnis 0x300000001: Da hab ich mich einfach vertippt :(.

Noch mal per Copy&Paste:
Code:
Console.WriteLine ("Hello World {0}!", BitConverter.IsLittleEndian);
int i = 1;
long a = i + 2L;
long b = i + 0x100000002L;
Console.WriteLine ("Test: 0x{0:X8}, 0x{1:X8}", a, b);

Unter x86:
Code:
Hello World True!
Test: 0x00000003, 0x100000003
Unter der FB7490 nach meinem Patch ;):
Code:
Hello World False!
Test: 0x00000003, 0x100000003

Also die Flags sind richtig gesetzt, mini-mips implementiert die iconv.i8 Instruktionen nicht. Das scheint falsch zu sein. Ich habe mal die Converter im decompose getauscht und schon haut es hin. Ich versuche mal zu verstehen was da noch so läuft, vielleicht kann man tatsächlich ein Patch dafür erstellen.

Dafür bräuchte ich aber Hilfe. Bin nämlich nur Windows-Entwickler und die Tools unter Unix sind für mich alle noch ziemlich ungewohnt :confused:.

Hat jemand noch ein paar bsp. was so schief läuft (kleine). Da kann ich noch mal schauen, ob es andere Instruktionen zu untersuchen gibt bzw. ob meine Hoffnung wieder zerstört wird ;).
 
Noch mal per Copy&Paste:
Copy&Paste ist immer besser, weniger Arbeit, weniger Fehler.
Unter der FB7490 nach meinem Patch ;):
Sieht gut aus. Welcher Patch?
Ich versuche mal zu verstehen was da noch so läuft, vielleicht kann man tatsächlich ein Patch dafür erstellen.
Dafür bräuchte ich aber Hilfe. Bin nämlich nur Windows-Entwickler und die Tools unter Unix sind für mich alle noch ziemlich ungewohnt
Ich dachte, Du hast schon einen Patch.
Wofür brauchst Du Hilfe?
 
Da hab ich mich missverständlich ausgedrückt (man beachte die Zeit). Ich habe die Dateien direkt editiert. Also noch keine Patch-Datei erstellt.

Des weiteren müsste man ja die ganzen Optionen, die ich zur Zeit noch in Batch-Dateien habe, irgendwie in einem Freetz-Paket oder so einbinden? Davon hab ich leider keine Ahnung? Genauso wie man ein Patch erstellt bzw. wie/ob man es an das mono-team zurück bringen kann?

Naja, aber erst einmal schau ich mir noch mal den Decomposer genau an! Vielleicht seh ich noch ein paar andere Unstimmigkeiten.
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,690
Beiträge
2,256,045
Mitglieder
374,664
Neuestes Mitglied
verrücktetmongo
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.