簡體   English   中英

Boost Android,ndk-build不會創建.so /頭文件

[英]Boost Android, ndk-build doesn't create .so / headers can't be found

我一直在嘗試按照以下說明將boost鏈接到我的android應用程序:

在Android中包含Boost C ++庫

這似乎非常簡潔和明智。 不幸的是,經過數天的嘗試,我看不到自己在做錯什么,因為最終結果是ndk-build返回有關我嘗試包含的boost標頭的“無此類文件或目錄”。

構建所需的Boost庫之后,我將它們復制到proj.android/jni/boost/include和proj.android/jni/boost/lib中。 然后,我在jni中創建了一個名為boost-build的目錄,在其中創建了一個Android.mk來處理定義模塊以鏈接到libboost_serialization靜態庫(這是我唯一感興趣的boost庫)。

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項目的生成文件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>

現在,今晚恰好運行一次,生成了一系列.so和.a,包括libbost_serialization.so,位於proj.android/obj/local中。 從那以后,盡管刪除了/ obj目錄,但我一直無法生成該文件。 同樣奇怪的是,盡管這篇文章頂部的鏈接提出了建議,但是運行ndk-build時並沒有創建/ libs目錄。 但是,我不是100%確定.so甚至需要生成。

因此,對於我的一生,我無法在此處找到問題所在。 任何解決方案或方向將不勝感激。

經驗教訓:LOCAL_C_INCLUDES實際上是一個必需的變量,並確保它指向正確的位置。 在我的情況下,它只是一個錯誤的“ ../”,包括“ boost /”的內容,而不是包含boost的目錄。

(另外,多睡些,而不要花幾個小時瀏覽這些問題。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM