2013-03-13 7 views
20

NDKを使用して、アンドロイドアプリケーション内でブーストライブラリを使用しようとしています。私は成功例のいくつかを見つけましたherehere、私は私について同じことを言うことはできません。私は具体的にはthis linkでライブラリを使用しようとしているだけでなく、ブーストスレッドライブラリも使用しています。以下のコードでは、数学ライブラリではなく、スレッドライブラリのみをインクルードしようとしています。私がブーストライブラリを構築するのに使用したプロセスは、私が付けた最初のリンクとほとんど同じです。Android NDK:boost C++ライブラリを含む

これまでのところ、私がBoostライブラリを正常にビルドしているようだが、私はndk-buildを実行すると、私は次のエラーを取得する:

Prebuilt  : libboost_thread.a <= <NDK>/sources/ 
cp: omitting directory `path/to/ndk/sources/boost' 
make: *** [obj/local/armeabi/libboost_thread.a] Error 1 

は明らかcp: omitting directory...は正確にエラーではありません。しかし、私がそれ以外に得ている唯一の事は、次の行です。それは本当に意味がありません。 Error 1

ここに私のAndroid.mkファイルです:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_STATIC_LIBRARIES := boost_thread 
LOCAL_LDLIBS := lboost_system-gcc-md lboost_thread-gcc-md -lgnustl_static 
LOCAL_LDLIBS += lboost_system-gcc-md lboost_thread-gcc-md \ 
     -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \ 
     -lgnustl_static 
LOCAL_SRC_FILES := #cpp_sources 
LOCAL_MODULE := com_example_ndkFile_CppMethods 
include $(BUILD_SHARED_LIBRARY) 
$(call import-module,boost) 

そしてAndroid.mkファイルがpath/to/ndk/sources/boost/でもあります:

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE:= boost_thread 
LOCAL_SRC_FILES:= android/lib/libboost_thread.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 
include $(PREBUILT_STATIC_LIBRARY) 

そして、私の謙虚なApplication.mkファイル:

APP_ABI := armeabi armeabi-v7a 
APP_STL := gnustl_static 
APP_CPPFLAGS = -fexceptions 
は、

bjamを使用してブーストライブラリを構築しました。ファイルlibboost_###.aはすべてsources/boost/android/libフォルダにあります。

エラーはどうなりますか?

+1

インストールに関するほぼすべての情報はここにあります [公式の "Boost library"のAndroidとiOSのサポート? ](http://stackoverflow.com/questions/14036311/official-boost-library-support-for-android-and-ios) – RDX

答えて

11

Boost-for-Androidを使用してブーストライブラリを構築しました。それから私は私のブースト/含める/ libディレクトリにアンドロイドのmakefile boost.mk

LOCAL_PATH := $(call my-dir) 

# boost_date_time 
# 
include $(CLEAR_VARS) 
LOCAL_MODULE := boost_date_time 
LOCAL_SRC_FILES := libboost_date_time-gcc-mt-1_53.a 
include $(PREBUILT_STATIC_LIBRARY) 

# boost_filesystem 
# 
include $(CLEAR_VARS) 
LOCAL_MODULE := boost_filesystem 
LOCAL_SRC_FILES := libboost_filesystem-gcc-mt-1_53.a 
include $(PREBUILT_STATIC_LIBRARY) 

# boost_thread 
# 
include $(CLEAR_VARS) 
LOCAL_MODULE := boost_thread 
LOCAL_SRC_FILES := libboost_thread-gcc-mt-1_53.a 
include $(PREBUILT_STATIC_LIBRARY) 

# boost_system 
# 
include $(CLEAR_VARS) 
LOCAL_MODULE := boost_system 
LOCAL_SRC_FILES := libboost_system-gcc-mt-1_53.a 
include $(PREBUILT_STATIC_LIBRARY) 

# boost_program_options 
# 
include $(CLEAR_VARS) 
LOCAL_MODULE := boost_program_options 
LOCAL_SRC_FILES := libboost_program_options-gcc-mt-1_53.a 
include $(PREBUILT_STATIC_LIBRARY) 

# boost_chrono 
# 
include $(CLEAR_VARS) 
LOCAL_MODULE := boost_chrono 
LOCAL_SRC_FILES := libboost_chrono-gcc-mt-1_53.a 
include $(PREBUILT_STATIC_LIBRARY) 

と私はブーストライブラリのいくつかは、私が持っているだけで、この

LOCAL_PATH := $(call my-dir) 

# SignalServer, executable 
# 
include $(CLEAR_VARS) 
LOCAL_CFLAGS   := -DTIXML_USE_TICPP 
#LOCAL_CFLAGS   += -DDEBUG 
LOCAL_STATIC_LIBRARIES := boost_thread \ 
    boost_system \ 
    boost_filesystem \ 
    boost_program_options \ 
    boost_chrono \ 
LOCAL_STATIC_LIBRARIES += ticpp \ 
    tia \ 
    tobicore \ 
    tobiid \ 
    tid \ 
    gdf 
LOCAL_MODULE   := signalserver 
LOCAL_C_INCLUDES  := $(LOCAL_PATH)/include 
LOCAL_C_INCLUDES  += $(LOCAL_PATH)/extern/include 
LOCAL_C_INCLUDES  += $(LOCAL_PATH)/../boost/include/boost-1_53 
LOCAL_SRC_FILES  := #cpp source 

include $(BUILD_EXECUTABLE) 

ようになります使用し、私のモジュールを持っていますAndroid.mkすべてのサブディレクトリのmakefileは

TOP_PATH := $(call my-dir) 

include $(TOP_PATH)/boost/lib/boost.mk 
include $(TOP_PATH)/signalserver/signalserver.mk 
. 
. 

と私のApplication.mkを列挙されている場所:

APP_PLATFORM   := android-14 
APP_ABI    := armeabi-v7a 
#APP_OPTIM    := debug 
#NDK_DEBUG    := 1 

NDK_TOOLCHAIN_VERSION := 4.6 
APP_STL    := gnustl_static 
APP_CPPFLAGS   := -fexceptions -frtti 
+0

ありがとう!それは間違いなく非常に有用です。 – conciliator

+0

私はあなたのアプローチを試してみましたが、失敗しました(LINAL_MODULEがなくなり、BUILD_SHARED_LIBRARYをjni/Android.mkに入れる前に)。私もブーストを使用しています1_53)。 – 4ndro1d

0

ここに:http://silverglint.com/boost-for-android/あなたはアンドロイドのための近代的な(例えば1.64.0)バージョンのブーストを構築するための簡単で痛い新しい方法を見つけることができます。 clangとgccで動作します。

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

関連する問題