web-dev-qa-db-ja.com

Android NDK R10eのブーストをコンパイルして使用します

Android NDKの場合、Boostをコンパイルして使用するにはどうすればよいですか? Boost for Android からbjamを使用して自分でコンパイルするまで、オンラインで見つけたすべてを試しましたfile。しかし、成功しません。bjamでコンパイルしようとすると、次のエラーが発生します。

error: toolset gcc initialization:

error: version 'androidR10e' requested but 'g++-androidR10e' not found and version '4.2.1' of default 'g++' does not match
error: initialized from /path/to/Android-ndk-r10e/sources/boost/tools/build/v2/user-config.jam:86

Android NDK R10eでBoostを正常に使用した人はいますか?

また、コンパイルできる場合、Androidアプリプロジェクトで使用するにはどうすればよいですか?

18
BSod

NDKr10d用にコンパイルできました。 NDKr10eでも同じです。 project-config.bjamは、NDKのgccコンパイラを指す必要があります。これは次のようになります。

import option ; 
using gcc : arm : D:\\Android\\ndk\\toolchains\\arm-linux-androideabi-4.9\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-g++.exe ; 
option.set keep-going : false ; 

次に、b2でコンパイルして、Android includeへのパスを指定します。

b2 --reconfigure <your options>
    toolset=gcc-arm
    include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\include
    include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\libs\<target platform>\include
    include=<ndk folder>\platforms\<Android api version>\Arch-arm\usr\include
    install --libdir=stage\lib\<target platform>

Ndkr10eに移動します。ブーストがまだ機能するかどうかわかりますか? :)

6
brainsandwich

最も簡単な方法は、ビルド済みですぐに使えるBoostライブラリが含まれている CrystaX NDK を使用することです。そして、CrystaX NDKでBoostを使用する方法の例を次に示します。 12

2

ブーストの指示に従って、Ubuntu 12.04でNDKr10eを使用してブースト1.60をビルドすることができました(ただし、ホストシステムにほとんど依存しないと思います)。これが私のメモです:

ブーストソースtarballを取得して解凍します(私は1.60を使用しました):boost_1_60_0.tar.bz2

moskewcz@maaya:/scratch/moskewcz/Android/src$ ll
total 74M
drwx------ 10 moskewcz moskewcz 4.0K Mar  9 14:14 boost_1_60_0
-rw-rw-r--  1 moskewcz moskewcz  74M Jan  5 11:15 boost_1_60_0.tar.bz2

uNIXの「カスタムバイナリのビルド」セクションを開始するときに、ブーストの指示に従います。

新しい空のルートを使用してb2をインストールします。つまり、/ scratch/boost-build-root;接頭辞としてusrを使用します。再びブーストの指示に従います:

moskewcz@maaya:/scratch/moskewcz/Android/src/boost_1_60_0/tools/build$ ./bootstrap.sh
moskewcz@maaya:/scratch/moskewcz/Android/src/boost_1_60_0/tools/build$ ./b2 install --prefix=/scratch/moskewcz/Android/boost-build-root/usr

パスにb2を配置します(ここでも指示に従って)

export PATH=/scratch/moskewcz/Android/boost-build-root/usr/bin:$PATH

いくつかのjamfileに(私は〜/ user-config.jamを持っていなかったので、それを作成してそれを使用しました。作成/編集するjamfileのより良い選択があるかもしれません)gccバージョン(ツールセット)を定義するためにいくつかのjam-code(?)を追加します)スタンドアロンツールチェーンからg ++を指します。これは、「スタンドアロンツールチェーンの作成」の指示に従って、NDKで通常の方法で作成されたツールチェーンであることに注意してください。 NDK自体の中でg ++を指しているわけではありません(機能する場合も機能しない場合もあります)。

import option ; 
using gcc : arm_linux_Android_4.9 : /scratch/Android-stc/bin/aarch64-linux-Android-g++ ; 
option.set keep-going : false ;

プロジェクトのルートをブーストしてビルドし、ほとんどの場合、指示に従います。 --build-dirはオプションですか?実行する-j8も追加しました||建てる

moskewcz@maaya:/scratch/moskewcz/Android/src/boost_1_60_0$ b2 -j8 --build-dir=bin.v2 toolset=gcc-arm_linux_Android_4.9 stage

これはデフォルトで静的ライブラリと共有ライブラリの両方をビルドしようとしますが、Android librt.soがないために共有ライブラリのビルドが失敗することに注意してください-私の調査によると、Android(一部?))librt.soの機能はlibc.so内にあります-したがって、Androidの共有ライブラリを構築するために、リンク手順から単に-lrtを削除してもかまいません。これを試みないでください。

https://code.google.com/p/Android/issues/detail?id=57

Androidのビルドブースト、エラー "cannot find -lrt"

1

私は何とか10dでビルドできました。 Android向けのブースト を使用してLinux-> Androidをクロスコンパイルすると、すぐに動作しました。

すべてのndkがすぐにサポートされているわけではないため、少し古いndkをダウンロードするには Boost for Android を使用できます。このガイドを使用できます: Android NDK?

注:ツールチェーンも指定したいと思いました。私はそれを2つの場所で行わなければなりませんでした:

  1. Build-Android.shで、上記の上記の行の直後:

    TOOLCHAIN = $ {TOOLCHAIN:-arm-linux-androideabi-4.9}

  2. コマンドラインで

    bash build-Android.sh [ndkの場所] --toolchain = arm-linux-androideabi-4.9

実際、--with-libraries=[comma separated list]でどのブーストコンポーネントが必要かを正確に指定すると、より効果的に機能しました。

代わりにすべてをビルドすると、次のようになります。

... 38個のターゲットの更新に失敗しました...

... 6つのターゲットをスキップしました...

...更新された10568ターゲット...

エラー:Android向けのブーストの作成に失敗しました!

できた!

0
Antonio

ここ: http://silverglint.com/boost-for-Android/ Android用の最新バージョン(例:1.64.0)のboostを構築するためのシンプルで痛みのない新しい方法を見つけることができます。 clangとgccで動作します。

このように構築されたブーストバイナリの使用方法を示すサンプルアプリも含まれています。

0
Declan