Подтвердить что ты не робот

Как построить i686-linux-android-gfortran для android-ndk8b (x86 arch Android)?

Я попытался построить i686-linux-android-gfortran, используя build-gcc.sh, после this (это для androdindk-7b), но я получаю сообщение об ошибке link.h. Я добавил link.h из здесь, но это дает еще больше ошибок.

Кто-нибудь пробовал включить i686-linux-android-gfortran для x86 Android?

4b9b3361

Ответ 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