2013-03-13 49 views
20

Tôi đang cố gắng sử dụng thư viện tăng cường bên trong ứng dụng Android của mình, sử dụng NDK. Tôi đã tìm thấy một vài câu chuyện thành công herehere, nhưng tôi không thể nói như vậy về tôi. Tôi đặc biệt đang cố gắng sử dụng thư viện trong this link, cũng như thư viện chuỗi tăng. Trong đoạn code dưới đây, tôi chỉ cố gắng bao gồm thư viện chủ đề chứ không phải thư viện toán học. Quá trình tôi sử dụng để xây dựng các thư viện tăng là khá nhiều giống như các liên kết đầu tiên tôi đính kèm.Android NDK: Bao gồm thư viện boost C++

Cho đến nay, có vẻ như tôi đã xây dựng thành công các thư viện tăng, nhưng khi tôi chạy ndk-build, tôi nhận được lỗi sau:

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

Rõ ràng là cp: omitting directory... là không chính xác một lỗi. Nhưng điều duy nhất tôi nhận được khác hơn là dòng tiếp theo, điều đó không thực sự có ý nghĩa gì cả. Error 1

Dưới đây là tập tin Android.mk tôi:

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) 

Và đó cũng là một tập tin Android.mk trong 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) 

Và tập tin Application.mk khiêm tốn của tôi:

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

Tôi đã xây dựng thư viện tăng cường bằng cách sử dụng bjam. Tất cả các tệp libboost_###.a đều nằm trong thư mục sources/boost/android/lib.

Lỗi tôi nhận được là gì?

+1

Hầu như tất cả thông tin liên quan đến cài đặt, biên soạn được đề cập ở đây [Hỗ trợ chính thức “Tăng cường thư viện” dành cho Android và iOS? ] (http://stackoverflow.com/questions/14036311/official-boost-library-support-for-android-and-ios) – RDX

Trả lời

11

Tôi đã xây dựng thư viện tăng cường bằng cách sử dụng Boost-for-Android. Sau đó, tôi có trong thúc đẩy tôi/include/lib makefile boost.mk android

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) 

và mô-đun của tôi, nơi tôi sử dụng một số các thư viện tăng trông như thế này

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) 

ngoài Tôi có một Android.mk nơi mà tất cả makefiles subdir được liệt kê

TOP_PATH := $(call my-dir) 

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

và Application.mk tôi:

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

Cảm ơn! Điều đó chắc chắn rất hữu ích. – conciliator

+0

Tôi đã thử cách tiếp cận của bạn và không thành công (Thiếu LOCAL_MODULE trước khi bao gồm BUILD_SHARED_LIBRARY trong jni/Android.mk). Tôi đang sử dụng cũng tăng 1_53). – 4ndro1d

0

Ở đây: http://silverglint.com/boost-for-android/ bạn có thể tìm một cách mới đơn giản và không đau để xây dựng phiên bản nâng cấp hiện đại (ví dụ 1.64.0) cho Android. Làm việc với clang và gcc.

Cũng bao gồm là một ứng dụng mẫu cho bạn thấy cách sử dụng các mã nhị phân tăng như vậy được xây dựng.

Các vấn đề liên quan