2012-08-16 37 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

相關問題