Android NDK:断言失败:未定义 LOCAL_MAKEFILE

Posted

技术标签:

【中文标题】Android NDK:断言失败:未定义 LOCAL_MAKEFILE【英文标题】:Android NDK: Assertion failure: LOCAL_MAKEFILE is not defined 【发布时间】:2020-09-16 02:11:25 【问题描述】:

我正在尝试构建一个项目,当我执行一个 gradle 任务来构建时,我收到以下错误:

~/Library/android/sdk/ndk/21.2.6472646/build/core/prebuilt-library.mk:20: *** Android NDK:  Assertion failure: LOCAL_MAKEFILE is not defined    .  Stop.

我以前从未使用过 NDK,我不确定我需要从哪里开始。

显然LOCAL_MAKEFILE没有定义,但是我应该在哪里定义呢?

如下,预建库文件的第 20 行:

    15  
    16  # this file is included from prebuilt-shared-library.mk or
    17  # prebuilt-static-library.mk to declare prebuilt library binaries.
    18  #
    19  
    20  $(call assert-defined, LOCAL_BUILD_SCRIPT LOCAL_MAKEFILE LOCAL_PREBUILT_PREFIX LOCAL_PREBUILT_SUFFIX)
    21  
    22  $(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT))
    23  $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))
    24  $(call check-LOCAL_MODULE_FILENAME)
    25  

有人知道发生了什么吗?

欢迎任何帮助!

现在谢谢!

【问题讨论】:

检查这个问题,和你的问题一样Question 我在发布我的问题之前阅读了这个答案。我尝试按照这些步骤操作,但我认为我们面临着不同的问题。 【参考方案1】:

这是https://github.com/android/ndk/issues/1267。它将在即将发布的 NDK 版本中修复。仅当您的主 Android.mk 文件实际上未命名为 Android.mk 时才会出现此问题。

【讨论】:

【参考方案2】:

在 NDK r21d 上同样的错误。感谢Dan Albert 提供patch。 这修复了错误:

build/core/definitions.mk 中更改行:

local-makefile = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST)))

_last_android_mk = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST)))
_last_non_ndk_makefile = $(lastword $(filter-out $(NDK_ROOT)%,$(MAKEFILE_LIST)))
local-makefile = $(if $(_last_android_mk),$(_last_android_mk),$(_last_non_ndk_makefile))

【讨论】:

【参考方案3】:

要解决这个问题,我需要删除所有 NDK 版本并仅使用 19 和 20 版本。

【讨论】:

以上是关于Android NDK:断言失败:未定义 LOCAL_MAKEFILE的主要内容,如果未能解决你的问题,请参考以下文章

对函数 Android NDK 的未定义引用

在android NDK中包含本地头文件时的未定义引用

FIRESTORE (7.14.3) 内部断言失败:值必须未定义或 Uint8Array

使用 Android NDK 构建本机 OpenCV 会给出“对 'cv::String::deallocate()' 的未定义引用”

Android Studio NDK链接器错误未定义引用'cv :: _ OutputArray :: _ OutputArray(cv :: Mat&)'

NDK 未在 android studio 中配置问题