2013-02-15 15 views
7

Ich frage mich, ob jemand es geschafft hat, die neue SDL2 mit der Toolchain des Android NDK (R8D) zu bauen.Erstellen SDL2 mit NDK Toolchain

SDL2 scheint sehr nah an der Veröffentlichung zu sein (seit gestern ist es nicht "UNTER KONSTROKTION mehr: http://hg.libsdl.org/SDL/rev/0a3d2ec7af6d). Es kommt mit einem Android.mk und kompiliert nur gut nach den Anweisungen in der mitgelieferten README.android-Datei. Meine Frage ist, ob es wirklich keine funktionierenden Automake basierte Build gibt oder verfügbar sein wird, um es auf Android zu kompilieren, oder etwas stimmt nicht mit meinem Toolchain-Setup?

Ich habe die NDK-Toolchain nach den Anweisungen der Dokumentation bei $ installiert NDK/doc/STANDALONE-TOOLCHAIN.html Ich verwende gcc 4.6 Hier ist eine Umgebung, die ich verwende:

#!/bin/sh 
export TOOLCHAIN=$HOME/Android/android-14-arm 
export PATH=$TOOLCHAIN/bin:$PATH 
export SYSROOT=$TOOLCHAIN/sysroot 
export CROSS_COMPILE="arm-linux-androideabi" 
export CC=$CROSS_COMPILE-gcc 
export CXX=$CROSS_COMPILE-g++ 
export CPP=$CROSS_COMPILE-cpp 
export CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon" 
export LDFLAGS="-march=armv7-a -Wl,--fix-cortex-a8" 
echo "Compiler set up for ARM 14" 

Die configure params:

./configure --host=arm-linux-androideabi --prefix=$SYSROOT/usr/local 

mit der gleichen Konfiguration i libjpeg-turbo v8 und SDL_image erfolgreich gebaut. Der configure-Skript den Cross-Compiler erkennt, und baut die Make-Datei, aber es findet X11-Unterstützung, kann das OpenGL ES nicht sehen ... Die Make fehlschlägt:

In file included from /usr/include/features.h:378:0, 
      from /usr/include/sys/types.h:27, 
      from ./include/SDL_stdinc.h:35, 
... 

ich das configure Protokoll überprüft, i habe keine Ahnung wo das "/ usr/include" herkommt. Tatsächlich aber fügt das generierte Makefile diese Zeile in EXTRA_CFLAGS dem Compiler hinzu. Das NDK-Dokument verweist auf das --with-sysroot = $ SYSROOT als optional, ich habe es aufgenommen, um zu sehen, ob es das Problem löst, aber das hat nicht geholfen. Als letzten Versuch habe ich das Makefile manuell bearbeitet, diesen Verweis korrigiert, und jetzt beschwerte sich der Compiler über X11.h. AFAIK Android hat nichts mit X11 zu tun, also denke ich, dass der ganze Build-Tree völlig ungeeignet für die Verwendung mit NDK ist.

Ich habe auch eine andere Konfiguration versucht, in einem älteren Thread here gefunden. Weder definieren -DANDROID -mandroid -fomit-frame-Zeiger noch Wechsel zurück zu -march = ARMv7-a -mfloat-abi = softfp -mfpu = VFP -mthumb“das Problem gelöst.

bei früheren Projekten, musste ich um config.guess und config.s zu aktualisieren, damit mein Compiler erkannt wird SDL scheint diese nicht zu verwenden Außerdem gibt es kein Makefile.ac oder Makefile.am, mit dem SDL arbeitet, und keine Vorlagen für andere Plattformen Für einen guten Ausgangspunkt, um mein eigenes Makefile zu erstellen, musste ich mich nie mit Makefiles herumschlagen, ich habe wirklich keine Chance, diese Probleme zu lösen, selbst wenn es erfolgreich ist, werde ich wahrscheinlich auch ein Configure-Tool benötigen , da ich keine Ahnung habe, wie ndk-build es schafft, SDL2 ohne Konfigurations-Skripte zu installieren

Das Zusammenstellen der SDL-Quellen mit dem Projekt ist die einzige funktionierende - aber hässliche Lösung. Ich möchte die notwendigen lib und Header-Dateien mit make install bereitstellen.

Ich hoffe, dass die Lösung etwas wirklich einfach und klar ist, dass ich einfach nicht darüber nachdenken ...

+0

Das Fehler-Snippet ist nicht wirklich der Fehler. Sie haben es versäumt, den Fehler einzugeben, und alles, was darin enthalten ist, ist die Datei, die den Fehler enthält. – Samveen

+0

Das Erstellen von SDL2 mit configure; make sollte theoretisch funktionieren, aber keiner der Entwickler baut es so auf, das ist der Grund, warum es abgehört wird. Fühlen Sie sich frei, alle Fehler zu melden, die Sie finden (und Patches!) zu Bugzilla https://bugzilla.libsdl.org Eine Sache, die Sie versuchen können, wenn Sie Lust haben zu experimentieren, läuft configure, nach dieser Kopie include/SDL_config_android.h über SDL_config.h, dann führen Sie make, vielleicht das funktioniert (SDL_config_android.h ist ein vorgekochter Konfigurationsheader für Android, der vernünftige Einstellungen haben sollte). – gabomdq

Antwort