1

外部 Android モジュールに gnustl_static を追加していますが、ビルドすると次のエラーが発生します。

make: *** No rule to make target `prebuilt/ndk/android-ndk-r7/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/libstdc++.a', needed by `out/target/product/msm8960/obj/SHARED_LIBRARIES/liballjoyn_intermediates/LINKED/liballjoyn.so'.  Stop.

「prebuilt/ndk/android-ndk-r7/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/」の下を見ると、libstdc++.aが見つかりません.libsupc++.aというフィールドがあります

ビルド システムは、「build/core」フォルダにある binary.mk ファイルからこれを取得しています。

    # LOCAL_NDK_STL_VARIANT is gnustl_static
my_ndk_stl_include_path := $(my_ndk_source_root)/cxx-stl/gnu-libstdc++/libs/$(TARGET_CPU_ABI)/include \
                           $(my_ndk_source_root)/cxx-stl/gnu-libstdc++/include
my_ndk_stl_static_lib := $(my_ndk_source_root)/cxx-stl/gnu-libstdc++/libs/$(TARGET_CPU_ABI)/libstdc++.a

問題は、このエラーを回避する方法がわからないことです。

ビルド済みフォルダーには libstdc++ のコピーが多数ありますが、リストされている場所にはありません。は、

prebuild/ndk/$(ANDRIOD_NDK_VERSION)/platforms/$(ANDROID_SDK_VERSION)/$(ARCHETECTURE_TYPE)/usr/lib/libstdc++.a

ここに私の Android.mk ファイルの短縮形があります:

LOCAL_PATH := $(call my-dir)

# Rules to build libabc.so

include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := .cc

LOCAL_SDK_VERSION := 8
LOCAL_NDK_VERSION := 7
LOCAL_NDK_STL_VARIANT := gnustl_static

LOCAL_CFLAGS += \
        -std=gnu++0x

LOCAL_C_INCLUDES := \
        external/abc/inc \
        external/openssl/include

LOCAL_SRC_FILES := \
        file1.cc \
        file2.cc

LOCAL_SHARED_LIBRARIES := \
        libcrypto \
        libssl \
        liblog

LOCAL_PRELINK_MODULE := false

LOCAL_REQUIRED_MODULES := \
         external/openssl/crypto/libcrypto \
         external/openssl/ssl/libssl

LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libabc

include $(BUILD_SHARED_LIBRARY)

「ターゲットを作成するルールがない」ビルドの問題を解決する方法を知っている人はいますか?

4

2 に答える 2

1

見つかった解決策:

簡単な答えは、LOCAL_NDK_VERSION のバージョンを 7 から 5 または 6 に変更する必要があるということです。

複雑な答えは、NDK-7 がリリースされたときに行われた変更を考慮して binary.mk ファイルが更新されていないことです。

NDK-5 および NDK-6 で gnustl_static を使用する場合、STL のすべてを含むライブラリ ファイルは、binary.mk ファイルで指定された場所にある libstdc++.a にありました。NDK-7 がリリースされたとき、ライブラリ名は libstdc++.a から libgnustl_static.a に変更されました。この変更を考慮して binary.mk が更新されたようには見えません。

どのプロジェクトも gnustl_static を使用していないように見えるので、これはそれほど驚くべきことではありません。Android リポジトリ内のすべてのコードに対して grep を実行しましたが、gnustl_static に設定された LOCAL_NDK_VERSION を使用していることがわかった唯一のコードは、私自身のものでした。

于 2012-06-13T15:34:08.797 に答える
-1

LOCAL_NDK_STL_VARIANTSTL バリアントの選択には使用しないでください。

ファイルで使用する必要がAPP_STL := gnustl_staticありApplication.mkます。

于 2012-06-12T20:40:06.470 に答える