2012-08-16 87 views
42

我试图使用build-gcc.sh构建i686-linux-android-gfortran,下面是this (这是forrodindk-7b),但是我得到关于link.h的错误。我从here添加了link.h,但是它给出了更多的错误。如何为android-ndk8b(x86 arch Android)构建i686-linux-android-gfortran?

有没有人试过为x86安卓系统启用i686-linux-android-gfortran?

+10

荣誉与Fortran的:) – 2012-08-16 08:43:05

+0

针对移动设备的操作系统,你已经成功地buildi在尝试gfortran之前,只需要gcc工作的c编译器部分? – DaveP 2012-08-17 01:38:57

+0

Android-ndk8b自带c编译器(i686-linux-android-gcc,i686-linux-android-g ++ ..),但缺少i686-linux-android-gfortran。感谢您的回复Dave – solti 2012-08-17 01:43:51

回答

1

https://groups.google.com/forum/#!msg/android-ndk/QR1qiN0jIpE/g0MHkhTd4YMJ按selalerer建议。我没有尝试这个,因此我将其作为社区维基发布以供参考。

Fortran的86安卓 =================

该指南是基于这一个,非常感谢菲尔: Compiling Android NDK with Objective-C-enabled gcc errors

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'到这个新的fo lder连续

3)确保已安装的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 there: 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语言= C,C++,FORTRAN

6)在文件的Android NDK-R8C /建造/工具/ build-mingw64-toolchain.sh改变线: var_append GCC_CONFIGURE_OPTIONS“ - -enable语言= C,C++” 到 var_append GCC_CONFIGURE_OPTIONS “--enable语言= C,C++,FORTRAN”

7)在文件的Android NDK-R8C /建造/工具/构建-GCC。 sh,更改行: EXTRA_CONFIG_FLAGS = $ EXTRA_CONFIG_FLAGS“--disable-libquadmath --dis能够-插件 “ 到 EXTRA_CONFIG_FLAGS = $ EXTRA_CONFIG_FLAGS” - 禁用libquadmath - 禁用libquadmath支持 - 禁用插件”

8)在文件中的Android NDK,R8C /编译/工具/构建-host-GCC。sh,更改行: ARGS = $ ARGS“--enable-languages = c,C++” 至 ARGS = $ ARGS“--enable-languages = 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 /你的/ path/to/android-ndk-r8c x86-4.7 (不用担心类似的消息“EXPR:警告:不可移植BRE:”)

10)和下降到你的膝盖在屏幕前,祈祷,不知怎的,这些 无数的配置脚本做检查主没有人需要,使用丑陋的shell语言 ,用从右到左的缩进烹饪你的大脑,将以某种方式设法编译数十亿个太小的文件(这样,10%的时间花在编译 和90上%启动GCC),并在观看进度后的一小时后尾部-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。

而且这里有一些经验教训的方式学习,因此,谷歌发现这个页面:

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

*)当x86链接失败(适用于ARM)时,错误消息“GCC_NO_EXECUTABLES后不允许链接测试”显示 。原因是GCC不包括 合适的ANDROID_STARTFILE_SPEC和ANDROID_ENDFILE_SPEC,从 gcc-4.6.1/gcc/config/linux-android.h。 GCC 4.6.1只针对ARM指定它们,但是对于i386而言不是 ,但是GCC 4.8.0则是如此。从谷歌下载的GCC也可以, 所以最好使用Google的GCC。

*)的错误消息“致命错误:link.h:没有这样的文件或目录”也恰好 与谷歌的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在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, 所以这个bug已修复。

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

*)的错误消息“错误:构建libatomic需要Pthreads” 构建从gnu.org下载的gcc-4.8版ARM,版本号 时可以更好地使用Google的GCC。

*)与Android的NDK-R8C来到海湾合作委员会并没有为我工作(错误信息大约 的libstdC++。so.6太旧),而一个在Android的NDK-R8B工作 没有问题。由于android-ndk应该尽可能多地支持 ,所以我不确定为什么Google员工决定依赖更新的libstdC++, ,但好消息是构建自己的工具链可以解决问题。

*)如果你在编译仿制morestack.c得到一个错误,然后更换 的#ifdef Linux的 //在Linux上,前两个实时信号与 使用的NPTL #如果定义(GLIBC)& &定义(的Linux) //在Linux上,前两个实时信号用于由NPTL