Android NDK:模块MediaEncoder依赖于未定义的模块:cutils gnustl dl

时间:2017-03-21 03:05:01

标签: android compiler-errors android-ndk

我将ADT项目转换为Android Studio。但是,我在构建这个项目时不断收到错误:

错误:(687)Android NDK:模块MediaEncoder依赖于未定义的模块:cutils gnustl dl

这就是Android.mk中的内容。我是NTK的新手,有人可以在这里建议这个问题吗?

 # building application library 
#
include $(CLEAR_VARS)
LOCAL_MODULE := libMediaEncoder
LOCAL_CPP_EXTENSION := .cc .cpp
LOCAL_CPPFLAGS := -O2 -Werror -Wall 
LOCAL_C_INCLUDES :=  $(MY_LOCAL_PATH)
LOCAL_SRC_FILES := main_jni.cpp \
                   h264encoder.cpp \
                   g72x/g726_32.c \
                   g72x/g711.c \
                   g72x/g72x.c 

LOCAL_LDLIBS += -llog -lz
LOCAL_SHARED_LIBRARIES := libcutils\
                          libgnustl\
                          libdl

2 个答案:

答案 0 :(得分:1)

我相信您使用的项目配置为在AOSP构建的上下文中构建,而不是由NDK构建。但它仍然适用于NDK的旧版本。

当前版本 r14 已集成到Android Studio 2.3中,需要对 Android.mk 进行一些更改。

include $(CLEAR_VARS)
LOCAL_MODULE := libMediaEncoder
LOCAL_CPPFLAGS := -O2 -Werror -Wall 
LOCAL_C_INCLUDES :=  $(MY_LOCAL_PATH)
LOCAL_SRC_FILES := main_jni.cpp \
                   h264encoder.cpp \
                   g72x/g726_32.c \
                   g72x/g711.c \
                   g72x/g72x.c 
LOCAL_LDLIBS += -llog -lz -ldl
LOCAL_SHARED_LIBRARIES := libcutils_prebuilt
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libcutils_prebuilt
LOCAL_SRC_FILES := {full-path-to}/libcutils.so
include $(PREBUILT_SHARED_LIBRARY)

要解决对 gnustl 的依赖关系,请运行ndk-build APP_STL=gnustl_static,或在 Application.mk 文件中定义 APP_STL

请注意,您的项目使用非公共系统库 libcutils.so 。这个图书馆曾经被纳入NDK(见https://stackoverflow.com/a/22017733/192373),但在过去的3年里,谷歌一直在努力阻止与它的联系。

您可以自己构建 libcutils.so 作为AOSP的一部分,或者您可以从设备adb pull或甚至从兼容的模拟器中{ "google": { "families": [ "Alegreya Sans:400,400italic,700,700italic", "Arvo:400,400italic,700,700italic", "Averia Libre:400,400italic,700,700italic", "Averia Sans Libre:400,400italic,700,700italic", "Josefin Sans:400,400italic,700,700italic", "Josefin Slab:400,400italic,700,700italic", "Karla:400,400italic,700,700italic", "Lobster Two:400,400italic,700,700italic", "Lora:400,400italic,700,700italic", "Montserrat Alternates:400,400italic,700,700italic", "Playfair Display SC:400,400italic,700,700italic", "Raleway:700italic,700,400italic,400:latin", "Roboto Condensed:400,400italic,700,700italic", "Roboto:400,400italic,700,700italic", "Rubik:400,400italic,700,700italic", "Sansita:400,400italic,700,700italic", "Ubuntu:700italic,700,400italic,400" ] } } 。您也可以在Web上的某处找到此二进制文件(例如GitHub)。

最后一击是公布的Android 7.0 Nougat系统链接更改。 TL; NR:任何依赖此库的应用程序都无法在未来的Android版本上运行。

答案 1 :(得分:1)

您需要安装较旧版本的ndk Android NDK,修订版10e(2015年5月)为我工作,然后使用该ndk-build