【问题标题】:Android NDK: Module MediaEncoder depends on undefined modules: cutils gnustl dlAndroid NDK:Module MediaEncoder 依赖于未定义的模块:cutils gnustl dl
【发布时间】:2017-03-21 03:05:01
【问题描述】:

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

错误:(687) Android NDK:Module 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

【问题讨论】:

    标签: android compiler-errors android-ndk


    【解决方案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 年中,Google 一直在努力阻止链接到它。

    您可以自己构建 libcutils.so 作为 AOSP 的一部分,或者您可以从您的设备或什至从兼容的模拟器 adb pull 它。您还可以在 Web 的某个地方找到这个二进制文件(例如 GitHub)。

    最后一击来自Android 7.0 Nougat 系统链接的宣布更改。 TL;NR:任何依赖于这个库的应用都不能在未来的 Android 版本上运行。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 2020-02-05
        • 2018-10-26
        • 2022-12-04
        相关资源
        最近更新 更多