De https://groups.google.com/forum/#!msg/Android-ndk/QR1qiN0jIpE/g0MHkhTd4YMJ comme l'a suggéré selalerer. Je n'ai pas essayé cela, donc je le poste en tant que wiki communautaire à des fins de référence.
Fortran pour x86 Android =================
Le guide est basé sur celui-ci, merci beaucoup à Phil : Compilation d'Android NDK avec des erreurs de gcc en Objective-C
1) Téléchargez et décompressez le NDK Android 'Android-ndk-r8c', (l'ancien NDK -r8b ne fonctionnera pas à cause de l'absence du fichier link.h !) wget http://dl.google.com/Android/ndk/Android-ndk-r8c-linux-x86.tar.bz2
2) Créez quelque part un dossier appelé 'toolchain-src' (par exemple dans le dossier Android-ndk-r8c), cd vers ce nouveau dossier
3) Assurez-vous d'avoir installé git ('yum install git' ou autre ) et téléchargez les sources de la chaîne d'outils :
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) Créez le dossier 'binutils', 'cd' dans ce répertoire, décompressez. binutils-2.23 : wget ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz tar -xvzf binutils-2.23.tar.gz Vous devriez maintenant avoir un répertoire toolchain-src/binutils/binutils-2.23
5) Allez dans le dossier toolchain-src/build, éditez le Makefile.in, en changeant la ligne : --with-gnu-as --with-gnu-ld --enable-languages=c,c++ en --with-gnu-as --with-gnu-ld --enable-languages=c,c++,fortran
6) Dans le fichier Android-ndk-r8c/build/tools/build-mingw64-toolchain.sh changez la ligne : var_append GCC_CONFIGURE_OPTIONS "--enable-languages=c,c++" en var_append GCC_CONFIGURE_OPTIONS "--enable-languages=c,c++,fortran".
7) Dans le fichier Android-ndk-r8c/build/tools/build-gcc.sh, changez la ligne : EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS" --disable-libquadmath --disable-plugin" en EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS" --disable-libquadmath --disable-libquadmath-support --disable-plugin".
8) Dans le fichier Android-ndk-r8c/build/tools/build-host-gcc.sh, changez la ligne : ARGS=$ARGS" --enable-languages=c,c++" en ARGS=$ARGS" --enable-languages=c,c++,fortran" Et changez la ligne ARGS=$ARGS" --disable-libquadmath --disable-plugin --disable-libitm --disable-bootstrap" en ARGS=$ARGS" --disable-libquadmath --disable-libquadmath-support --disable-plugin --disable-libitm --disable-bootstrap "
9) Construisez votre nouvelle chaîne d'outils : /votre/vos chemins/vers/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 /votre/vos chemins/vers/toolchain-src /votre/vos chemins/vers/Android-ndk-r8c x86-4.7 (ne vous inquiétez pas des messages du type 'expr : warning : unportable BRE:')
10) Et mettez-vous à genoux devant l'écran, en priant le Seigneur que d'une manière ou d'une autre ces innombrables scripts qui font des vérifications dont personne n'a besoin, en utilisant un horrible langage shell qui vous cuit le cerveau avec une indentation allant de droite à gauche, vont d'une manière ou d'une autre réussir à compiler un zillion de fichiers beaucoup trop petits (de sorte que 10% du temps est passé sur la compilation et 90% au démarrage de GCC), et après une heure à regarder la progression avec tail -F /tmp/ndk-VotreNomUtilisateur/build/toolchain/config.log votre toolchain sera prêt comme par magie. Vous la trouverez dans le dossier Android-ndk-r8c/toolchains.
11) Enfin, accédez au dossier /votre/chemin/vers/Android-ndk-r8c/toolchains/x86-4.7/prebuilt/linux-x86/i686-linux-Android'. et lancez cette commande : ln -s ../libexec libexec Sans cette commande, il peut arriver que g++ lève le message d'erreur "g++ : fatal error : -fuse-linker-plugin, but liblto_plugin.so not found". En utilisant strace, j'ai trouvé que g++ cherche dans le mauvais dossier, mais le lien ci-dessus lui permet de trouver le fichier liblto_plugin.so malgré tout.
Et voici quelques leçons apprises en cours de route, afin que Google trouve cette page :
*) Pour accélérer la compilation, vous pouvez enlever le '-j1'. Mais seulement après avoir réussi à fonctionner une fois, car la compilation en parallèle sur plusieurs cœurs de processeur a été signalée comme causer des problèmes supplémentaires.
*) Le message d'erreur "Les tests de liens ne sont pas autorisés après GCC_NO_EXECUTABLES" apparaît lorsque la liaison échoue pour x86 (fonctionne pour ARM). La raison en est que GCC n'inclut pas les bons ANDROID_STARTFILE_SPEC et ANDROID_ENDFILE_SPEC de gcc-4.6.1/group. gcc-4.6.1/gcc/config/linux-Android.h. GCC 4.6.1 ne les spécifie que pour ARM, mais pas pour i386. pour i386, GCC 4.8.0 le fait cependant. Les GCC téléchargés depuis Google le font aussi, il est donc préférable d'utiliser les GCC de Google.
*) Le message d'erreur "fatal error : link.h : No such file or directory" se produit également avec le GCC de Google, et apparemment ( http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50877 ) uniquement lorsque vous activez des langages supplémentaires comme objc ou fortran. Le fil de discussion sur le bogue est ici : http://gcc.gnu.org/ml/gcc-bugs/2012-08/msg00494.html MIPS a link.h dans Android-ndk-r8b/platforms/Android-9/arch-mips/usr/include Dans Android-ndk-r8c, link.h est maintenant également présent dans Android-9/arch-x86/usr/include/link.h, donc ce bug a été corrigé.
*) Le message d'erreur "fatal error : quadmath_weak.h : No such file or directory" : Cela se produit également avec la dernière version de gcc-4.8, nous pouvons donc continuer à utiliser le GCC 4.7 de Google. Google lui-même utilise --disable-libquadmath, mais nous avons besoin en plus de --disable-libquadmathsupport (voir http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47648 ). Il faut donc l'ajouter dans Android-ndk-r8c/build/tools/build-gcc.sh et Android-ndk-r8c/build/tools/build-host-gcc.sh
*) Le message d'erreur "error : Pthreads est nécessaire pour construire libatomic". Se produit lors de la construction de la version ARM de gcc-4.8 téléchargé à partir de gnu.org, Il vaut mieux rester avec les GCC de Google.
*) Le GCC fourni avec Android-ndk-r8c ne fonctionne pas pour moi (message d'erreur à propos de libstdc++.so.6 trop vieux), alors que celui d'Android-ndk-r8b a fonctionné sans problème. sans problème. Puisque Android-ndk devrait supporter autant d'environnements que possible possible, je ne sais pas pourquoi les Googlers ont décidé de dépendre d'une libstdc++ plus récente, mais la bonne nouvelle est que la construction de votre propre toolchain résout le problème.
*) Si vous obtenez une erreur lors de la compilation de generic-morestack.c, remplacez alors #ifdef linux // Sous Linux, les deux premiers signaux temps réel sont utilisés par le NPTL. avec #if defined( GLIBC ) && defined( linux ) // Sous Linux, les deux premiers signaux temps réel sont utilisés par le NPTL.