16

Android-ndk-r5b を使用してブースト ライブラリを Android に移植およびリンクする際に問題があります。次の手順を使用して、最初に (mpi、python なしで) ブースト ライブラリをビルドします。

1.boost_1_46_0\libs\thread\build の 53 行目にコメントを追加:

# if [os.name] = "NT" { api = win32 ; }

2.ブーストルートディレクトリにファイルuser-config.jamを作成します

androidNDKRoot = ../android-ndk-r5b ;

gcc を使用: android4.4.3: $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-g++.exe:
    --sysroot=$(androidNDKRoot)/platforms/android-3/arch-arms
    -mthumb
    -オス
    -fno-strict-aliasing
    -O2
    -DNDEBUG
    -g
    -例外
    -frtti
    -lstdc++
    -I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/include
    -I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include
    -D__GLIBC__
    -DBOOST_NO_INTRINSIC_WCHAR_T
    $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar.exe
    $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ranlib.exe
    Linux
;

3.ビルドブースト

bjam.exe --user-config=user-config.jam --without-python --without-mpi toolset=gcc-android4.4.3 link=static runtime-link=static target-os=linux --stagedir=android > d:\out.txt

4.アプリケーション.mk

APP_STL := gnustl_static
APP_PLATFORM := アンドロイド-3
APP_CPPFLAGS += -mthumb
APP_CPPFLAGS += -Os
APP_CPPFLAGS += -fno-strict-aliasing
APP_CPPFLAGS += -O2
APP_CPPFLAGS += -DNDEBUG
APP_CPPFLAGS += -g
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -lstdc++
APP_CPPFLAGS += -D__GLIBC__
APP_CPPFLAGS += -DBOOST_NO_INTRINSIC_WCHAR_T
APP_CPPFLAGS += -L/cygdrive/d/Android/boost_1_46_0/Android/lib/

5. Android.mk

# 方法
# http://source.android.com/porting/build_cookbook.html
#

LOCAL_PATH:= $(my-dir を呼び出す)

# ================================================= =============
#リブット
# ================================================= =============

$(CLEAR_VARS) を含める
LOCAL_MODULE := libudt
LOCAL_C_INCLUDES += /cygdrive/d/Android/boost_1_46_0/
LOCAL_SRC_FILES += udt.cpp
LOCAL_STATIC_LIBRARIES := boost_thread-gcc-mt-s-1_46

$(BUILD_SHARED_LIBRARY) を含める

6.udt.cpp

#include "boost/bind.hpp"
#include "boost/thread.hpp"

void thread_fn (整数)
{
}

extern "C" int func1 ()
{
    boost::thread thrd (boost::bind (thread_fn, 1));
    thrd.join ();
    0 を返します。
}

7. $NDK/ndk-build

コンパイル ++ サム: udt > > >':
D:/Android/boost_1_46_0/boost/thread/detail/thread.hpp:204: `boost::thread::start_thread()' への未定義の参照
D:/Android/boost_link/obj/local/armeabi/objs/udt/udt.o: 関数「func1」内:
D:/Android/boost_link/jni/udt.cpp:19: 「boost::thread::join()」への未定義の参照
D:/Android/boost_link/jni/udt.cpp:20: `boost::thread::~thread()' への未定義の参照
D:/Android/boost_link/jni/udt.cpp:20: `boost::thread::~thread()' への未定義の参照
D:/Android/boost_link/obj/local/armeabi/objs/udt/udt.o:(.data.rel.ro._ZTIN5boost6detail11thread_dataINS_3_bi6bind_tIvPFv
iENS2_5list1INS2_5valueIiEEEEEEEE[boost::detail::thread_data > > >]+0x8 の typeinfo): `boost::detail::thread_data_base の typeinfo' への未定義の参照
collect2: ld が 1 つの終了ステータスを返しました
make: *** [/cygdrive/d/Android/boost_link/obj/local/armeabi/libudt.so] エラー 1
4

2 に答える 2

2

現在、関連するブースト ファイルをライブラリのメイクファイルに含めるだけで、ブーストの一部を使用しています。

于 2011-03-01T14:06:49.637 に答える
0

gcc を使用して静的ライブラリを Android プラットフォームにリンクできるかどうかはわかりません。私が知っているのは、すべてを NDK コンパイラでコンパイルする必要があるということです (命令セットが異なるため)。

これを使用できます: https://github.com/MysticTreeGames/Boost-for-Android ( .tar )

NDKのカスタマイズされたバージョンが必要になります。

于 2011-03-01T10:11:15.857 に答える