Включить библиотеку Boost C ++ в Android - PullRequest
21 голосов
/ 25 октября 2011

Я давно пытаюсь жениться на Boost и Android на Windows и перепробовал множество подходов, но все же не повезло.Я хочу сделать пример программы с использованием библиотеки Boost в Android.Я следую этому уроку здесь.

Как подсказывает этот урок, я сохранил мою Boost lib в **** (Android NDK) \ sources \ boost_1_44_0 ****, успешно скомпилировал ее.

Затем я сделал Android.mk файл внутри sources / boost_1_44_0 и сделал запись каждой библиотеки, которую я хочу использовать.В этом случае lib.файл libboost_date_time-gcc-mt-s-1_44.a доступен в boost_1_44_0 / android / lib /
Вот содержимое Android.mk файл.

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_date
LOCAL_SRC_FILES:= boost_1_44_0/android/lib/libboost_date_time-gcc-mt-s-1_44.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY) 

Теперь следующим шагом будет создание файла Android.mk в каталоге моего проекта внутри папки jni (это создание общей библиотеки)..).Вот его содержание.

LOCAL_PATH := $(call my-dir)
 include $(call all-subdir-makefiles)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)
LOCAL_LDLIBS := -llog -ldl
LOCAL_MODULE    := ndkfoo
LOCAL_SRC_FILES := ndkfoo.cpp
LOCAL_STATIC_LIBRARIES := boost_date
include $(BUILD_SHARED_LIBRARY)
$(call import-module,boost_1_44_0) 

Здесь находится файл Application.mk, расположенный в той же папке, внутри папки jni .Содержимое файла Application.mk выглядит следующим образом:

APP_STL      = gnustl_static #(or APP_STL = stlport_static as required)
APP_CPPFLAGS = -fexceptions  

И, наконец, вот мой ndkfoo.cpp файл

#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <boost/date_time.hpp>

using namespace boost::gregorian;

void Java_com_ndkfoo_NdkfooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
    date weekstart(2002,Feb,1);

}

, эта программа может быть неправильной, ноПроблема в том, что он не распознает какие-либо заголовки или функции наддува.и я всегда получаю ошибку компиляции.

Что-то я пропускаю или делаю неправильно?Любая помощь могла бы быть полезна.

РЕДАКТИРОВАТЬ: Этот вопрос содержит все, что вам нужно включить библиотеку Boost в Android.Для большего количества подсказок посмотрите на мой ответ ниже.Надеюсь, это будет работать для вас.

Спасибо.

1 Ответ

5 голосов
/ 12 декабря 2011

Мой вопрос содержал почти полные шаги по включению библиотеки BOOST в Android.Но все же есть некоторые важные моменты, которые вы должны помнить, работая с этим.

  • Удалять автоматически сгенерированные папки obj и lib s Каждый раз перед компиляцией собственного кода.

  • Если вы собираетесь писать свой собственный код на C ++, добавьте LOCAL_CPP_EXTENSION := .cpp в файл Android.mk (jni/Android.mk).

  • если вы собираетесь писать код на C ++, поместите весь свой cpp-код внутри extern "C" {}.

    extern C { /*cpp code*/ }

  • Не сдавайся, будь терпелив и продолжай пытаться.;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...