如何为android-ndk8b(x86 arch android)构建i686 linux android gfortran?

如何为android-ndk8b(x86 arch android)构建i686 linux android gfortran?,android,gcc,x86,fortran,Android,Gcc,X86,Fortran,我尝试使用build-gcc.sh构建i686 linux android gfortran,如下所示 (这是针对Androdk-7b的)但是我得到了关于link.h的错误。我从中添加了link.h,但它给出了更多错误 有人尝试过为x86 android启用i686 linux android gfortran吗?正如selalerer建议的那样。我没有尝试过这个,所以我以社区维基的形式发布,以供参考 Fortran for x86 Android ================= 本指南基于

我尝试使用build-gcc.sh构建i686 linux android gfortran,如下所示 (这是针对Androdk-7b的)但是我得到了关于link.h的错误。我从中添加了link.h,但它给出了更多错误

有人尝试过为x86 android启用i686 linux android gfortran吗?

正如selalerer建议的那样。我没有尝试过这个,所以我以社区维基的形式发布,以供参考

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

本指南基于此,非常感谢Phil:

1) 下载并解包Android NDK'Android-NDK-r8c'(较旧的-r8b NDK由于缺少链接而无法工作。h!): wget

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”创建到此目录,然后解压缩 比努蒂尔斯-2.23: wget ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz tar-xvzf-binutils-2.23.tar.gz 现在应该有一个文件夹工具链src/binutils/binutils-2.23

5) 更改为文件夹工具链src/build,编辑Makefile.in,更改行: 用GNU AS——GNU-LD——启用语言= C、C++ 到 用GNU AS——GNU-LD——使能语言= C、C++、FORTRAN

6) 在文件android-ndk-r8c/build/tools/build-mingw64-toolchain.sh中,更改行: var\u append GCC\u CONFIGURE\u OPTIONS”--启用语言=c,c++” 到 VARIAppApdioGccCuffuluxOpType“启用语言= C、C++、FORTRAN”< /P> 7) 在文件android-ndk-r8c/build/tools/build-gcc.sh中,更改行: EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS”--禁用libquadmath--禁用插件 到 EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS”--禁用libquadmath--禁用libquadmath支持--禁用插件

8) 在文件android-ndk-r8c/build/tools/build-host-gcc.sh中,更改行: ARGS=$ARGS”--启用语言=c,c++” 到 ARGs= $ARGS“——使能语言= C、C++、FORTRAN” 换线 ARGS=$ARGS--disable libquadmath--disable plugin--disable libitm--disable bootstrap“ 到 ARGS=$ARGS”--禁用libquadmath--禁用libquadmath支持--禁用插件--禁用libitm--禁用引导”

9) 构建新的工具链: /你的/path/to/android-ndk-r8c/build/tools/build-gcc.sh-j1--gmp版本=5.0.5--mpfr版本=2.4.2--mpc版本=0.8.1--binutils版本=2.23--gdb版本=7.3.x/your/path/to/toolchain src/your/path/to/android-ndk-r8c x86-4.7 (不要担心诸如“expr:warning:unportable BRE:”之类的消息)

10) 跪在屏风前,向上帝祈祷,这些东西 无数的配置脚本使用丑陋的shell语言执行无人需要的检查 这会让你的大脑从右到左出现凹痕,不知怎么的,它会设法 编译大量太小的文件(因此10%的时间都花在编译上) 90%是在启动GCC时),并且在与 tail-F/tmp/ndk YourUserName/build/toolchain/config.log 你的工具链将神奇地准备好。您可以在android-ndk-r8c/toolschains文件夹中找到它

11) 最后,将“cd”添加到文件夹中 “/your/path/to/android-ndk-r8c/toolschains/x86-4.7/prebuild/linux-x86/i686 linux-android” 并运行以下命令: ln-s../libexec libexec 如果没有此命令,g++可能会引发错误消息 “g++:致命错误:-熔丝链接器插件,但未找到liblto_plugin.so”。 使用strace,我发现g++在错误的文件夹中查找,但是链接 上面让它找到liblto_plugin.so文件

下面是一些经验教训,让谷歌找到这个页面:

*)要加快编译速度,可以删除“-j1”。但只有在你得到 它只能工作一次,因为在多个CPU核上并行构建被报告给 造成额外的麻烦

*)出现错误消息“GCC\u NO\u可执行文件之后不允许进行链接测试” x86链接失败时(适用于ARM)。原因是GCC不包括 正确的ANDROID\u开始文件\u规范和ANDROID\u结束文件\u规范来自 gcc-4.6.1/gcc/config/linux-android.h。GCC 4.6.1仅对ARM进行了规定,但未规定 但是,对于i386,GCC 4.8.0不支持。从谷歌下载的GCC也可以, 所以最好使用谷歌的GCC

*)错误消息“致命错误:link.h:没有这样的文件或目录”也会出现 谷歌的GCC,显然() 仅当启用其他语言(如objc或fortran)时。 错误线程如下所示: MIPS在android-ndk-r8b/platforms/android-9/arch-MIPS/usr/include中有link.h 在android-ndk-r8c中,link.h现在也出现在android-9/arch-x86/usr/include/link.h中, 所以这个错误被修复了

*)错误消息“致命错误:quadmath_-weak.h:没有这样的文件或目录”: 最新的gcc-4.8也会出现这种情况,所以我们可以继续使用谷歌GCC4.7。 谷歌本身使用——禁用libquadmath,但我们还需要——禁用libquadmath支持 (见附件)。所以这需要加进去 android-ndk-r8c/build/tools/build-gcc.sh 和 android-ndk-r8c/build/tools/build-host-gcc.sh

*)错误消息“error:Pthreads是构建libatomic所必需的” 在构建从gnu.org下载的gcc-4.8的ARM版本时发生, 最好还是留在谷歌的GCC

*)android-ndk-r8c附带的GCC对我不起作用(关于 libstdc++.so.6太旧了),而android-ndk-r8b中的一个可以工作 没有问题。因为android ndk应该支持尽可能多的环境 尽可能地,我很高兴