2012-06-12 63 views
1

我将gnustl_static添加到外部Android模块,并在构建它时出现以下错误。使用gnustl_static构建外部模块时无法找到libstdC++

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. 

当我看到在 “预建/ NDK/Android的NDK-R7 /来源/ CXX-STL/GNU-的libstdC++ /库/ armeabi-V7A /” 我无法找到的libstdC++,一个是有FILD libsupC++。一个

本着“建/芯”文件夹中的构建系统从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) 

任何人有任何想法如何,我可以解决“没有规则,使目标”建设的问题?

回答

1

发现的解决方案:

简单的答案是,我需要的LOCAL_NDK_VERSION版本改变从7到5或6

复杂的答案是,binary.mk文件尚未更新到帐户对于NDK-7发布时所做的更改。

在使用gnustl_static的NDK-5和NDK-6中,包含STL所有内容的库文件位于libstdC++。a中,该文件位于binary.mk文件中指定的位置。 NDK-7发布时,库名称已从libstdC++。a更改为libgnustl_static.a。它看起来并不像binary.mk已更新以解释此更改。

这并不令人感到意外,因为它似乎没有项目使用gnustl_static。我在Android资源库中的所有代码上做了grep,我发现使用LOCAL_NDK_VERSION设置为gnustl_static的唯一代码是我自己的。

0

你应该不使用LOCAL_NDK_STL_VARIANT来选择STL变体。

您应该在Application.mk文件中使用APP_STL := gnustl_static

+0

如果我使用ndk-build构建应用程序,那将是真的,但是我正在构建一个位于android ICS源代码中的模块。位于外部项目。这是使用Android制作系统,因此做了一些改变。我自然先尝试了APP_STL,但它没有工作,然后我发现这篇文章http://grokbase.com/t/gg/android-building/1235xqd6cr/iso-c-forbids-declaration-of-vector-with-no-type – gnash117