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