2013-03-13 2 views
20

NDK를 사용하여 내 안드로이드 응용 프로그램 내에서 부스트 라이브러리를 사용하려고합니다. 나는 성공 사례 몇 가지를 발견했다. herehere, 나에 관해서도 똑같이 말할 수는 없다. 나는 구체적으로 this link에서 라이브러리를 사용하려고하고 있으며, 부스트 스레드 라이브러리도 사용하고있다. 아래 코드에서 수학 라이브러리가 아닌 스레드 라이브러리 만 포함하려고합니다. 부스트 라이브러리를 만드는 데 사용한 프로세스는 제가 첨부 한 첫 번째 링크와 거의 같습니다. Android NDK : 부스트 C++ 라이브러리 포함

지금까지, 내가 성공적으로 부스트 라이브러리를 구축 한 것 같다,하지만 난 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) 

그리고 거기 path/to/ndk/sources/boost/의 Android.mk 파일도있다 :

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 디렉토리를 포함

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) 

처럼 보이는 안드로이드 메이크 boost.mk Android.mk 모든 서브 디렉토리 메이크는

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

당신의 접근 방법을 시도했는데 성공하지 못했습니다 (BUILD_SHARED_LIBRARY를 jni/Android.mk에 포함시키기 전에 LOCAL_MODULE이 없습니다). 나는 또한 boost 1_53을 사용 중입니다.) – 4ndro1d

0

여기 : http://silverglint.com/boost-for-android/ 당신은 안드로이드에 대한 현대적인 (예 : 1.64.0) 버전의 부스트를 만드는 간단하고 고통없는 새로운 방법을 찾을 수 있습니다. clang 및 gcc에서 작동합니다.

이렇게 빌드 된 부스트 바이너리를 사용하는 방법을 보여주는 샘플 앱이 포함되어 있습니다.

관련 문제