2012-08-16 6 views
42

Ho provato a costruire i686-linux-android-gfortran usando build-gcc.sh dopo this (è per androdindk-7b) ma ottengo un errore su link.h. Ho aggiunto link.h da here, ma fornisce ulteriori ulteriori errori.Come creare i686-linux-android-gfortran per android-ndk8b (x86 arch Android)?

Qualcuno ha provato a abilitare i686-linux-android-gfortran per x86 Android?

+10

Complimenti per il targeting di dispositivi mobili con sistema operativo Fortran :) –

+0

avete saputo buildi solo la parte del compilatore c di gcc funziona prima di provare gfortran? – DaveP

+0

Android-ndk8b viene fornito con il compilatore c (i686-linux-android-gcc, i686-linux-android-g ++ ..) ma manca i686-linux-android-gfortran. Grazie per la risposta Dave – solti

risposta

1

Da https://groups.google.com/forum/#!msg/android-ndk/QR1qiN0jIpE/g0MHkhTd4YMJ come suggerito da Selaler. Non ho provato questo, quindi sto postando come wiki della comunità per scopi di riferimento.

Fortran per x86 Android =================

La guida si basa su questo, molte grazie a Phil: Compiling Android NDK with Objective-C-enabled gcc errors

1) Scaricare e decomprimere Android NDK 'Android-NDK-R8C', (il più vecchio -r8b NDK non funziona a causa di link.h mancante):! wget http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2

2) Creazione di un posto una cartella chiamata 'toolchain- src '(ad esempio all'interno della cartella android-ndk-r8c), ' cd 'a questa nuova fo lder

3) Assicuratevi di avere installato git ('yum install git' o qualsiasi altra cosa ..) e scaricare i sorgenti toolchain:

git clone https://android.googlesource.com/toolchain/build.git 
    git clone https://android.googlesource.com/toolchain/gmp.git 
    git clone https://android.googlesource.com/toolchain/gdb.git 
    git clone https://android.googlesource.com/toolchain/mpc.git 
    git clone https://android.googlesource.com/toolchain/mpfr.git 
    git clone https://android.googlesource.com/toolchain/expat.git 

4) Creare la cartella 'binutils', 'CD' in questa directory, scompattiamo binutils-2.23 lì: wget ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz tar -xvzf binutils-2.23.tar.gz Ora dovresti avere una cartella toolchain- src/binutils/binutils-2.23

5) Passare alla cartella toolchain-src/build, modifica il Makefile.in, cambiando la riga: --with-gnu-as --with-gnu-ld --enable-languages ​​= c, C++ a --with-gnu-as --with -gnu-LD --enable-languages ​​= c, C++, Fortran

6) Nel file android-NDK-R8C/build/strumenti/build-mingw64-toolchain.sh modificare la riga: GCC_CONFIGURE_OPTIONS var_append "- enable-languages ​​= c, C++" a GCC_CONFIGURE_OPTIONS var_append "--enable-languages ​​= C, C++, Fortran"

7) nel file android-NDK-R8C/build/strumenti/build-gcc. sh, cambia linea: EXTRA_CONFIG_FLAGS = $ EXTRA_CONFIG_FLAGS "--disable-libquadmath --dis grado-plugin " a EXTRA_CONFIG_FLAGS = $ EXTRA_CONFIG_FLAGS" --disable-libquadmath --disable-libquadmath-support --disable-plugin"

8) Nel file android-NDK-R8C/build/strumenti/costruire -host-gcc.sh, modificare la riga: ARG = $ args "--enable-languages ​​= c, C++" a ARG = $ args "--enable-languages ​​= C, C++, Fortran" e cambiare la linea di ARG = $ ARGS "--disable-libquadmath --disable-plugin --disable-libitm --disable-bootstrap" a ARGS = $ ARGS "--disable-libquadmath --disable-libquadmath-support --disable-plugin - -disable-libitm --disable-bootstrap"

9) Costruisci la tua nuova toolchain: /your/path/to/android-ndk-r8c/build/tools/build-gcc.sh -j1 --gmp- version = 5.0.5 --mpfr-version = 2.4.2 --mpc-version = 0.8.1 --binutils-version = 2.23 --gdb-version = 7.3.x/your/path/to/toolchain-src/il tuo/percorso/per/android-ndk-r8c x86-4.7 (non preoccuparti messaggi come 'espr: avvertimento: portabile BRE:')

10) e si scende alle ginocchia di fronte allo schermo, pregando il Signore che in qualche modo queste innumerevoli script di configurazione facendo controlli che nessuno ha bisogno, usando un brutto linguaggio shell che cuoce il tuo cervello con indentazione che va da destra a sinistra, in qualche modo riuscirà a compilare una miriade di file troppo piccoli (in modo che il 10% del tempo sia speso per la compilazione e 90 % all'avvio di GCC) e dopo un'ora di osservazione dei progressi con tail -F /tmp/ndk-YourUserName/build/toolchain/config.log la tua toolchain sarà magicamente pronta. Lo troverai nella cartella android-ndk-r8c/toolchains.

11) Infine, 'cd' alla cartella '/your/path/to/android-ndk-r8c/toolchains/x86-4.7/prebuilt/linux-x86/i686-linux-android' e fuggi questo comando: ln -s ../libexec libexec Senza questo comando, può capitare che g ++ elabori il messaggio di errore "g ++: errore fatale: -fuse-linker-plugin, ma liblto_plugin.so non trovato". Usando strace, ho trovato che g ++ sembra nella cartella sbagliata, ma il collegamento in alto consente comunque di trovare il file liblto_plugin.so.

e qui ci sono un paio di lezioni apprese sulla strada, in modo che Google trova questa pagina:

*) Per velocizzare la compilazione, è possibile rimuovere il '-j1'. Ma solo dopo aver ottenuto il per funzionare una volta, poiché la creazione in parallelo su più core CPU è stata segnalata a causa problemi aggiuntivi.

*) Il messaggio di errore "Test di collegamento non consentito dopo GCC_NO_EXECUTABLES" mostra quando il collegamento non riesce per x86 (funziona per ARM). Il motivo è che GCC non include il corretto ANDROID_STARTFILE_SPEC e ANDROID_ENDFILE_SPEC da gcc-4.6.1/gcc/config/linux-android.h. GCC 4.6.1 li specifica solo per ARM, ma non per per i386, tuttavia GCC 4.8.0. Anche i GCC scaricati da Google fanno, , quindi usa il GCC di Google.

*) Il messaggio di errore "fatale errore: link.h: No such file or directory" accade anche con GCC di Google, e apparentemente (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50877) solo quando si attiva lingue aggiuntive come objc o FORTRAN. Il thread di bug è qui: http://gcc.gnu.org/ml/gcc-bugs/2012-08/msg00494.html MIPS ha link.h in android-ndk-r8b/piattaforme/android-9/arch-mips/usr/include In android-ndk-r8c, link.h è ora presente anche in android-9/arch-x86/usr/include/link.h, quindi questo errore è stato corretto.

*) Il messaggio di errore "errore fatale: quadmath_weak.h: No such file or directory": Succede anche con l'ultima gcc-4.8, in modo che possiamo solo continuare a utilizzare Googles GCC 4.7. Google stesso utilizza --disable-libquadmath, ma abbiamo anche bisogno di --disable-libquadmathsupport (vedere http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47648). Quindi questo deve essere aggiunto in android-NDK-R8C/build/strumenti/build-gcc.sh e android-NDK-R8C/build/strumenti/build-host-gcc.sh

*) Il messaggio di errore "errore: Pearreads è necessario per compilare libatomic" Succede quando si costruisce la versione ARM di gcc-4.8 scaricata da gnu.org, meglio stare con i GCC di Google.

*) Il GCC che è venuto con Android-NDK-R8C non ha funzionato per me (messaggio di errore relativo libstdC++. So.6 essere troppo vecchio), mentre quello di android-NDK-r8b lavorato senza problemi . Poiché Android-ndk dovrebbe supportare il maggior numero possibile di ambienti , non sono sicuro del motivo per cui i googler hanno deciso di dipendere da un nuovo libstdC++, ma la buona notizia è che la creazione della propria toolchain risolve il problema.

*) Se si ottiene un errore durante la compilazione generic-morestack.c, quindi sostituire #ifdef linux // Su Linux, i primi due segnali in tempo reale sono utilizzati dal NPTL con #if defined (GLIBC) & & definito (linux) // su Linux, i primi due segnali in tempo reale sono utilizzati dal NPTL

Problemi correlati