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

时间:2012-08-16 07:39:34

标签: android gcc x86 fortran

我尝试使用this之后的build-gcc.sh构建i686-linux-android-gfortran (这是针对androdindk-7b)但是我收到有关link.h的错误。我从here添加了link.h,但它提供了更多错误。

有没有人尝试为x86 Android启用i686-linux-android-gfortran?

1 个答案:

答案 0 :(得分:1)

来自https://groups.google.com/forum/#!msg/android-ndk/QR1qiN0jIpE/g0MHkhTd4YMJ的selalerer建议。我没试过这个,所以我发布社区维基作为参考目的。

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

该指南基于此指南,非常感谢Phil:    Compiling Android NDK with Objective-C-enabled gcc errors

1)下载并解压Android NDK' android-ndk-r8c',(由于缺少link.h,旧版-r8b NDK无法工作!):       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,c ++       至       --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语言= C,C ++"       至       ARGS = $ ARGS" --enable语言= 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)建立新的工具链:       /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:警告:不可移植的BRE:')

10)在屏幕前跪下,向主祈祷,不知怎的        无数的配置脚本使用丑陋的shell语言执行无人需要的检查        通过从右到左的缩进来烹饪你的大脑,将以某种方式设法        编译了太多太小的文件(因此10%的时间花在编译上        并且90%在启动海湾合作委员会),并在观察进展一小时后        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'。但只有在你得到之后       它工作一次,因为报告了在多个CPU核心上并行构建       引起额外麻烦。

*)GCC_NO_EXECUTABLES"之后不允许出现错误消息"链接测试出现       当x86链接失败时(适用于ARM)。原因是海湾合作委员会不包括       来自的正确的ANDROID_STARTFILE_SPEC和ANDROID_ENDFILE_SPEC       GCC-4.6.1 / GCC /配置/ Linux的android.h。 GCC 4.6.1仅为ARM指定它们,但不是       对于i386,GCC 4.8.0却可以。从谷歌下载的GCC也可以,       所以最好使用谷歌的GCC。

*)错误消息"致命错误:link.h:没有这样的文件或目录"也发生了       与谷歌的海湾合作委员会,显然(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50877)       仅当您启用其他语言(如objc或fortran)时。       错误线程在这里:http://gcc.gnu.org/ml/gcc-bugs/2012-08/msg00494.html       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,因此我们可以继续使用Googles GCC 4.7。       Google本身使用--disable-libquadmath,但我们还需要--disable-libquadmathsupport       (见http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47648)。所以这需要加入       Android的NDK-R8C /编译/工具/ build-gcc.sh       和       机器人-NDK-R8C /建造/工具/ build-host-gcc.sh

*)错误消息"错误:Pthreads是构建libatomic"       在构建从gnu.org下载的ARM版gcc-4.8时会发生,       更好地留在谷歌的海湾合作委员会。

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

*)如果在编译generic-morestack.c时出错,则替换       #ifdef linux         //在Linux上,NPTL使用前两个实时信号       同       #if defined( GLIBC )&&定义(的的Linux )         //在Linux上,NPTL使用前两个实时信号