0

次の手順に従って、ブーストを Android アプリケーションにリンクしようとしています。

Android に Boost C++ ライブラリを含める

これはかなり簡潔で賢明なようです。残念ながら、何日も試行した後、何を間違っているのかわかりません.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% 確信が持てません。

したがって、私の人生では、ここで問題を特定することはできません。解決策や方向性は非常に高く評価されます。

4

1 に答える 1

1

教訓: LOCAL_C_INCLUDES は実際には必要な変数であり、正しい場所を指していることを確認してください。私の場合、ブーストを含むディレクトリではなく、誤った「../」であり、「ブースト/」の内容が含まれていました。

(また、これらの問題に何時間も費やすのではなく、もっと寝てください。)

于 2013-01-16T16:51:43.600 に答える