私は、NDKとBoostライブラリ、およびCocos2d-xゲームエンジンの一部であるライブラリを使用してAndroidプロジェクトに取り組んでいます。私が抱えている問題は、ライブラリのリンクとNDKの使用に関する単純な問題だと思いますが、完全を期すためにBoostとcocos2d-xについて言及します。
ndk-buildを使用してプロジェクトをビルドしようとすると、すべてのコードがオブジェクトファイルに正常にコンパイルされているように見えます。これは、g++が使用しているすべてのライブラリヘッダーを見つけることができることを示しています。G ++は、リンクが開始されると爆発します。これは、コードとライブラリを結び付ける共有ライブラリを構築しようとするためです。
エラーのあるビルドログは、http://txtup.co/tMtJにあります。
発生する最初のエラー、
C:/Android/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.7/../../ .. /../arm-linux-androideabi/bin/ld.exe:エラー:開くことができません./obj/local/armeabi/libgnustl_static.a:アクセスが拒否されました
libgnustl_static.aには、「std :: string :: operator +」のようなすべての関数の実装が含まれている必要があるため、g++はそのエラーの後に参照が見つからないと言っているので非常にわかりやすいようです。
libgnustl_static.aはビルド中に./obj/local/armeabiにコピーされるので、私のmakefileは少なくともある時点でライブラリを認識していることがわかります。その「許可が拒否されました」エラーの前にそれが起こると思いますが、確信が持てません。
以下は、このすべてのコンパイルの最終製品になりたいlibgame.soライブラリのandroid.mkです。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS += -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi
LOCAL_MODULE := game_shared
LOCAL_MODULE_FILENAME := libgame
FILE_LIST := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES += hellocpp/main.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../../cocos2dx/platform/third_party/android/prebuilt/libboost_serialization/include/ \
$(LOCAL_PATH)/../../../cocos2dx/platform/third_party/android/prebuilt/libboost_serialization/include/boost/archive \
$(LOCAL_PATH)/../../../cocos2dx/platform/third_party/android/prebuilt/libboost_serialization/include/boost/serialization
LOCAL_WHOLE_STATIC_LIBRARIES := boost_1_53_serialization cocos2dx_static cocosdenshion_static cocos_extension_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,libboost_serialization) \
$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions)
makefileがlibgnustl_staticを検索または使用できない理由はありますか?または、権限を変更する作業ディレクトリにライブラリをコピーする方法に何かありますか?