40

これに続いてbuild-gcc.shを使用してi686-linux-android-gfortranをビルドしようとしまし (これはandrodindk-7b用です)が、link.hに関するエラーが発生します。hereから link.h を追加しましたが、さらに多くのエラーが発生します。

x86 Android で i686-linux-android-gfortran を有効にしようとした人はいますか?

4

1 に答える 1

1

https://groups.google.com/forum/#!msg/android-ndk/QR1qiN0jIpE/g0MHkhTd4YMJから、販売者が提案しました。私はこれを試していないので、参考のためにコミュニティ wiki として投稿しています。

x86 Android 用 Fortran =================

このガイドは、Phil に感謝します: 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」します。

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 で次の行を変更します。 ,C++,フォートラン"

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++" to 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 /your/path/to/android-ndk-r8c x86-4.7 ( 'expr: warning: unportable BRE:' のようなメッセージは気にしないでください)

10) そして、画面の前でひざまずき、右から左へのインデントで脳を調理する醜いシェル言語を使用して、誰も必要としないチェックを行うこれらの無数の構成スクリプトが何らかの方法で管理することを主に祈ります非常に小さなファイルを無数にコンパイルし (10% の時間がコンパイルに費やされ、90% が GCC の起動に費やされるように)、そして tail -F /tmp/ndk-YourUserName/build/ で進行状況を 1 時間監視した後toolchain/config.log ツールチェーンは魔法のように準備ができています。これは android-ndk-r8c/toolchains フォルダーにあります。

11) 最後に、フォルダ「/your/path/to/android-ndk-r8c/toolchains/x86-4.7/prebuilt/linux-x86/i686-linux-android」に「cd」して、次のコマンドを実行します: ln -s ../libexec libexec このコマンドがないと、g++ で「g++: 致命的なエラー: -fuse-linker-plugin, but liblto_plugin.so not found」というエラー メッセージが表示される場合があります。strace を使用すると、g++ が間違ったフォルダーを検索することがわかりましたが、上記のリンクを使用すると liblto_plugin.so ファイルを見つけることができます。

Google がこのページを見つけられるように、途中で学んだいくつかの教訓を以下に示します。

*) コンパイルを高速化するには、「-j1」を削除できます。ただし、複数の CPU コアで並行してビルドすると、追加の問題が発生することが報告されているため、一度動作するようになってからです。

*) x86 でリンクが失敗すると、「GCC_NO_EXECUTABLES の後にリンク テストは許可されません」というエラー メッセージが表示されます (ARM では機能します)。その理由は、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 を使用するのが最適です。

*) 「fatal error: link.h: No such file or directory」というエラー メッセージは、Google の 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 に link.hがあります。 /usr/include android-ndk-r8c では、link.h が android-9/arch-x86/usr/include/link.h にも存在するようになったため、このバグは修正されました。

*) 「fatal error: quadmath_weak.h: No such file or directory」というエラー メッセージ: 最新の 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/tools/build-gcc.sh および android-ndk-r8c/build/tools/build-host-gcc.sh に追加する必要があります。

*) 「エラー: libatomic をビルドするには Pthreads が必要です」というエラー メッセージが表示されるのは、gnu.org からダウンロードした gcc-4.8 の ARM バージョンをビルドするときです。Google の GCC を使用することをお勧めします。

*) android-ndk-r8c に付属の GCC は機能しませんでした (libstdc++.so.6 が古すぎるというエラー メッセージ) が、android-ndk-r8b の GCC は問題なく機能しました。android-ndk は可能な限り多くの環境をサポートする必要があるため、Google 社員が新しい libstdc++ に依存することにした理由はわかりませんが、独自のツールチェーンを構築することで問題が解決するという朗報があります。

* ) generic - morestack.cのコンパイル中にエラーが発生した場合は、#ifdef linuxを置き換えます。 Linux では、最初の 2 つのリアルタイム シグナルが NPTL によって使用されます。

于 2014-04-28T21:56:41.213 に答える