次の手順に従って、ブーストを Android アプリケーションにリンクしようとしています。
これはかなり簡潔で賢明なようです。残念ながら、何日も試行した後、何を間違っているのかわかりません.ndk-buildは、含めようとしているブーストヘッダーに関して「そのようなファイルまたはディレクトリはありません」を返すためです。
必要なブースト ライブラリをビルドした後、それらを proj.android/jni/boost/include と proj.android/jni/boost/lib にコピーしました。次に、boost-build という名前の jni 内のディレクトリを作成します。ここで Android.mk を作成し、libboost_serialization スタティック ライブラリ (私が興味を持っている唯一のブースト ライブラリ) にリンクするモジュールを定義します。
LOCAL_PATH:= $(call my-dir)
# serialization
include $(CLEAR_VARS)
# I'm not sure this is necessary / helpful, but I've tried without it, as well
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include/boost-1_49 \
# EDIT: replaced previous line from this, at Igor's correction: $(LOCAL_PATH)/../include/boost-1_49/boost \
$(LOCAL_PATH)/../include/boost-1_49/boost/archive \
$(LOCAL_PATH)/../include/boost-1_49/boost/serialization
LOCAL_MODULE:= boost_serialization
LOCAL_SRC_FILES:= ../lib/libboost_serialization-gcc-mt-1_49.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/boost-build-includes
include $(PREBUILT_STATIC_LIBRARY)
Android プロジェクトの makefile、proj.android/jni/Android.m:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LDFLAGS= -L$(NDK_ROOT)/sources/crystax/libs/armeabi-v7a/4.6.3 -Lcrystax
LOCAL_CPPFLAGS += -fexceptions
LOCAL_CPPFLAGS += -frtti
LOCAL_MODULE := game_shared
LOCAL_MODULE_FILENAME := libgame
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/TitleScene.cpp \
../../Classes/GameSettings.cpp \
../../Classes/Cutscene.cpp \
../../Classes/HighScoreTable.cpp \
../../Classes/MaskNode.cpp \
../../Classes/MenuResponder.cpp \
../../Classes/HudElementBg.cpp \
../../Classes/OHRCharSelectMenu.cpp \
../../Classes/OHRDifficultySelectMenu.cpp \
../../Classes/Types.cpp \
../../Classes/OHRMainMenu.cpp
# I've tried with / without this variable, as well, with the same result
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../include/boost-1_49 \
# EDIT: replaced previous line from this, at Igor's correction: $(LOCAL_PATH)/../include/boost-1_49/boost \
$(LOCAL_PATH)/../boost/include/boost-1_49/boost/archive \
$(LOCAL_PATH)/../boost/include/boost-1_49/boost/serialization
LOCAL_WHOLE_STATIC_LIBRARIES := boost_serialization cocos2dx_static cocosdenshion_static cocos_extension_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,CocosDenshion/android) \
$(call import-module,boost-build) \
$(call import-module,cocos2dx)
ここで、ndk-build を実行してソースをコンパイルすると、次のエラーが発生します。
Compile++ thumb : game_shared <= main.cpp
Compile++ thumb : game_shared <= AppDelegate.cpp
In file included from jni/../../Classes/MapUtils.h:2:0,
from jni/../../Classes/Types.h:3,
from jni/../../Classes/menuresponder.h:2,
from jni/../../Classes/OHRMainMenu.h:2,
from jni/../../Classes/TitleScene.h:10,
from jni/../../Classes/AppDelegate.cpp:6:
jni/../../Classes/BoostUtils.h:2:36: fatal error: boost/archive/tmpdir.hpp: No such file or directory
(BoostUtils.h は、一連のシリアライゼーション関連のヘッダーを単純に含むヘッダーです)
#include <boost/archive/tmpdir.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/assume_abstract.hpp>
さて、今夜ちょうど 1 回、これを実行すると、proj.android/obj/local に libbost_serialization.so を含め、一連の .so と .a が生成されました。/obj ディレクトリを削除したにもかかわらず、それを生成することができませんでした。また、奇妙なことに、この投稿の上部にあるリンクで示唆されていることにもかかわらず、ndk-build の実行時に /libs ディレクトリが作成されていません。ただし、 .so を生成する必要さえあるとは 100% 確信が持てません。
したがって、私の人生では、ここで問題を特定することはできません。解決策や方向性は非常に高く評価されます。