如何为android-ndk8b(x86 arch Android)构buildi686-linux-android-gfortran?

我尝试使用build-gcc.sh构buildi686-linux-android-gfortran(这是forrodindk-7b),但是我得到关于link.h的错误。 我从这里添加了link.h,但是它提供了更多的错误。

有没有人试图启用x86的Android的i686-linux-android-gfortran?

https://groups.google.com/forum/#!msg/android-ndk/QR1qiN0jIpE/g0MHkhTd4YMJ按selalererbuild议。; 我没有尝试这个,所以我作为一个社区维基发布参考的目的。

Fortran for x86 Android =================

本指南基于此,非常感谢Phil: 使用Objective-C启用的gcc错误编译Android NDK

1)下载并解压缩Android NDK'android-ndk-r8c',(旧的-r8b NDK不会工作,因为缺lesslink.h!):wget http://dl.google.com/android/ndk/android -ndk-R8C-Linux的x86.tar.bz2

2)创build一个名为'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)创build文件夹'binutils','cd'到这个目录,解压binutils-2.23:wget http://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,c ++ to –with-gnu -as –with-gnu-ld –enable-languages = c,c ++,fortran

6)在文件android-ndk-r8c / build / tools / build-mingw64-toolchain.sh改变行:var_append GCC_CONFIGURE_OPTIONS“–enable-languages = c,c ++”var_append GCC_CONFIGURE_OPTIONS“–enable-languages = c ,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,c ++”为ARGS = $ ARGS“使用语言= c,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)构build新的工具链:/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)在屏幕前跪下,向主祷告,不知怎的,这些无数的configuration脚本不需要任何检查,使用一种丑陋的shell语言,用从右到左的缩进来烹饪你的大脑,将以某种方式pipe理编译一个十亿个太小的文件(所以有10%的时间花在编译上,90%的时间花在启动GCC上),并且在用tail -F / tmp / ndk-YourUserName / build / toolchain / config.log你的工具链会神奇地准备好。 你会在android-ndk-r8c / toolchains文件夹中find它。

11)最后,'cd'到文件夹'/your/path/to/android-ndk-r8c/toolchains/x86-4.7/prebuilt/linux-x86/i686-linux-android'并运行这个命令:ln -s ../libexec libexec没有这个命令,可能会发生g ++引发错误信息“g ++:fatal error:-fuse-linker-plugin,但liblto_plugin.so not found”。 使用strace,我发现g ++查找错误的文件夹,但上面的链接可以findliblto_plugin.so文件。

这里有一些经验教训,让Googlefind这个页面:

*)为了加快编译速度,你可以删除'-j1'。 但是只有一次才能正常工作,因为在多个CPU内核上并行构build报告会带来额外的麻烦。

*)x86链接失败(适用于ARM)时出现错误消息“GCC_NO_EXECUTABLES后不允许链接testing”。 原因是GCC不包括gcc-4.6.1 / gcc / config / linux-android.h中的正确的ANDROID_STARTFILE_SPEC和ANDROID_ENDFILE_SPEC。 GCC 4.6.1只规定他们为ARM,但不是为i386,但是GCC 4.8.0。 从Google下载的GCC也可以,所以最好使用Google的GCC。

*)错误消息“致命错误:link.h:没有这样的文件或目录”也出现在Google的GCC中,显然( http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50877 )只有当您可以启用其他语言,如objc或fortran。 bug线程在这里: http ://gcc.gnu.org/ml/gcc-bugs/2012-08/msg00494.html MIPS在android-ndk-r8b / platforms / android-9 / arch-mips中有link.h / usr / include在android-ndk-r8c中,link.h现在也出现在android-9 / arch-x86 / usr / include / link.h中,所以这个bug已经修复了。

*)错误消息“致命错误:quadmath_weak.h:没有这样的文件或目录”:它也发生在最新的gcc-4.8,所以我们可以继续使用谷歌GCC 4.7。 Google本身使用–disable-libquadmath,但我们还需要–disable-libquadmathsupport(请参阅http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47648 )。 所以这需要在android-ndk-r8c / build / tools / build-gcc.sh和android-ndk-r8c / build / tools / build-host-gcc.sh中添加

*)错误消息“错误:构buildlibatomic需要Pthreads”在构build从gnu.org下载的gcc-4.8的ARM版本时发生,最好留在Google的GCC中。

*)android-ndk-r8c附带的GCC没有为我工作(关于libstdc ++。so.6的错误信息太老了),而android-ndk-r8b中的那个没有问题。 由于android-ndk应该支持尽可能多的环境,所以我不确定为什么Google员工决定依赖一个更新的libstdc ++,但好消息是构build自己的工具链解决了这个问题。

*)如果在编译generic-morestack.c时出现错误,则replace#ifdef linux //在Linux上,NPTL使用前两个实时信号(#if defined( GLIBC )&& defined( linux )//在Linux上,前两个实时信号被NPTL使用