Ответ 1
Из https://groups.google.com/forum/#!msg/android-ndk/QR1qiN0jIpE/g0MHkhTd4YMJ, как предлагал selalerer. Я не пробовал это, поэтому я отправляю в качестве вики сообщества для справочных целей.
Фортран для x86 Android =================
Руководство основано на этом, большое спасибо Филу: Компиляция Android NDK с Objective-C -сертифицированными gcc-ошибками
1) Загрузите и распакуйте Android NDK 'android-ndk-r8c' (более старый -r8b NDK не будет работать из-за отсутствия link.h!): wget http://dl.google.com/android/ndk/android-ndk-r8c-linux-x86.tar.bz2
2) Создайте где-нибудь папку под названием "toolchain-src" (например, внутри папки android-ndk-r8c), 'cd' в эту новую папку
3) Убедитесь, что установлен git ('yum install git' или что-то еще..) и загрузите источники инструментальной цепочки:
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) Создайте папку "binutils", "cd" в этот каталог, распакуйте binutils-2.23: wget ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz tar -xvzf binutils-2.23.tar.gz Теперь у вас должна быть папка toolchain-src/binutils/binutils-2.23
5) Перейдите в папку toolchain-src/build, отредактируйте Makefile.in, изменив строку: --with-gnu-as -with-gnu-ld --enable-languages = c, С++ в --with-gnu-as --with-gnu-ld --enable-languages = c, С++, fortran
6) В файле android-ndk-r8c/build/tools/build-mingw64-toolchain.sh измените строку: var_append GCC_CONFIGURE_OPTIONS "--enable-languages = c, С++" в var_append GCC_CONFIGURE_OPTIONS "--enable-languages = c, С++, fortran"
7) В файле android-ndk-r8c/build/tools/build-gcc.sh измените строку: EXTRA_CONFIG_FLAGS = $EXTRA_CONFIG_FLAGS "--disable-libquadmath --disable-plugin" в EXTRA_CONFIG_FLAGS = $EXTRA_CONFIG_FLAGS "--disable-libquadmath --disable-libquadmath-support --disable-plugin"
8) В файле android-ndk-r8c/build/tools/build-host-gcc.sh измените строку: ARGS = $ARGS "--enable-languages = c, С++" в ARGS = $ARGS "--enable-languages = c, С++, fortran" И измените линию ARGS = $ARGS "--disable-libquadmath --disable-plugin --disable-libitm --disable-bootstrap" в ARGS = $ARGS "--disable-libquadmath --disable-libquadmath-support --disable-plugin --disable-libitm --disable-bootstrap"
9) Создайте новую инструментальную цепочку: /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/your/path/to/android-ndk-r8c x86-4.7 (не беспокойтесь о таких сообщениях, как "expr: warning: unportable BRE:" )
10) И спуститесь на колени перед экраном, молясь Господу, чтобы как-то эти бесчисленные скрипты configure делают проверки, которые никому не нужны, используя уродливый язык оболочки который готовит ваш мозг с отступом, идущим справа налево, каким-то образом справится скомпилировать миллион слишком маленьких файлов (так что 10% времени тратится на компиляцию и 90% при запуске GCC), и после часа наблюдения прогресса с tail -F/tmp/ndk-YourUserName/build/toolchain/config.log ваша инструментальная цепочка будет волшебной. Вы найдете его в папке android-ndk-r8c/toolchains.
11) Наконец, 'cd' в папку '/your/path/to/android-ndk-r8c/toolchains/x86-4.7/prebuilt/linux-x86/i686-linux-android' и запустите эту команду: ln -s../libexec libexec Без этой команды может случиться, что g++ вызывает сообщение об ошибке "g++: фатальная ошибка: -fuse-linker-plugin, но liblto_plugin.so не найден". Используя strace, я обнаружил, что g++ выглядит в неправильной папке, но ссылка выше, позволяет найти файл liblto_plugin.so тем не менее.
И вот несколько уроков, извлеченных на этом пути, так что Google находит эту страницу:
*) Чтобы ускорить компиляцию, вы можете удалить '-j1'. Но только после того, как вы получили он должен работать один раз, поскольку сообщалось о параллельном создании на нескольких ядрах ЦП вызывают дополнительные проблемы.
*) Сообщение об ошибке "Тесты ссылок не разрешены после появления GCC_NO_EXECUTABLES" при сбое ссылок для x86 (работает для ARM). Причина в том, что GCC не включает правильный ANDROID_STARTFILE_SPEC и ANDROID_ENDFILE_SPEC из GCC-4.6.1/ССАГПЗ/конфигурации/Linux-android.h. GCC 4.6.1 определяет только их для ARM, но не для i386, GCC 4.8.0 однако. GCC, загруженные из Google, также делают, поэтому лучше всего использовать Google GCC.
*) Также появляется сообщение об ошибке "фатальная ошибка: link.h: Нет такого файла или каталога" с Google GCC и, по-видимому (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50877) только когда вы включаете дополнительные языки, такие как objc или fortran. Поток ошибок здесь: http://gcc.gnu.org/ml/gcc-bugs/2012-08/msg00494.html MIPS имеет link.h в android-ndk-r8b/platform/android-9/arch-mips/usr/include В android-ndk-r8c link.h теперь также присутствует в android-9/arch-x86/usr/include/link.h, поэтому эта ошибка была исправлена.
*) Сообщение об ошибке "фатальная ошибка: quadmath_weak.h: нет такого файла или каталога": Это также происходит с последним gcc-4.8, поэтому мы можем просто продолжать использовать Googles GCC 4.7. Сам Google использует --disable-libquadmath, но нам также необходимо --disable-libquadmathsupport (см. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47648). Поэтому это необходимо добавить в андроид-NDK-R8C/сборки/инструменты/build-gcc.sh а также андроид-NDK-R8C/сборки/инструменты/build-host-gcc.sh
*) Сообщение об ошибке "ошибка: Pthreads необходимы для сборки libatomic" Случается при создании ARM-версии gcc-4.8, загруженной с gnu.org, лучше остаться с Google GCC.
*) GCC, который пришел с android-ndk-r8c, не работал у меня (сообщение об ошибке libstdС++. so.6 слишком старый), в то время как в android-ndk-r8b без проблем. Поскольку андроид-ndk должен поддерживать столько окружений насколько это возможно, я не уверен, почему Googlers решили зависеть от более нового libstdС++, но хорошая новость заключается в том, что создание вашей собственной инструментальной цепочки решает проблему.
*) Если вы получаете ошибку при компиляции generic-morestack.c, замените #ifdef linux // В Linux первые два сигнала реального времени используются NPTL с #if определено (GLIBC) && & определены ( Linux) // В Linux первые два сигнала реального времени используются NPTL