ndk-build не может найти библиотеки - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь собрать этот пример проекта с помощью ndk-build, но по некоторым причинам он не находит библиотеки. Это сообщение об ошибке, которое я получаю:

build-binary.mk: 688: Android NDK: модуль fastcvFeatDetect зависит от неопределенных модулей: журнал ГЛЕСв2

Я не знаю достаточно о ndk, чтобы знать, как проверить, доступны ли эти библиотеки и правильно ли я указываю их путь.

На верхнем уровне есть этот мастер-файл make:

# An Android.mk file must begin with the definition of the LOCAL_PATH variable.
# It is used to locate source files in the development tree. In this example,
# the macro function 'my-dir', provided by the build system, is used to return
# the path of the current directory (i.e. the directory containing the
# Android.mk file itself). 
#
LOCAL_PATH := $(call my-dir) 

JNI_DIR := $(LOCAL_PATH)
UTILS_DIR := $(LOCAL_PATH)/utils

# The function "$(call all-subdir-makefiles)" returns a list of Android.mk 
# files located in all sub-directories of the current 'my-dir' path.
# This function can be used to provide deep-nested source directory
# hierarchies to the build system.
#
include $(call all-subdir-makefiles)

Далее следуют файлы make в подкаталогах:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE:= false

# This variable determines the OpenGL ES API version to use:
# If set to true, OpenGL ES 1.1 is used, otherwise OpenGL ES 2.0.

USE_OPENGL_ES_1_1 := false

# Set OpenGL ES version-specific settings.

ifeq ($(USE_OPENGL_ES_1_1), true)
    OPENGLES_LIB  := -lGLESv1_CM
    OPENGLES_DEF  := -DUSE_OPENGL_ES_1_1
else
    OPENGLES_LIB  := -lGLESv2
    OPENGLES_DEF  := -DUSE_OPENGL_ES_2_0
endif

# An optional set of compiler flags that will be passed when building
# C ***AND*** C++ source files.
#
# NOTE: flag "-Wno-write-strings" removes warning about deprecated conversion
#       from string constant to 'char*'

LOCAL_CFLAGS := -Wno-write-strings $(OPENGLES_DEF)

# The list of additional linker flags to be used when building your
# module. This is useful to pass the name of specific system libraries
# with the "-l" prefix.

LOCAL_LDLIBS := \
     -llog $(OPENGLES_LIB)
LOCAL_LDFLAGS:= -Wl,--no-fix-cortex-a8

LOCAL_MODULE    := libfastcvFeatDetect
LOCAL_CFLAGS    := -Werror
LOCAL_SRC_FILES := ../About.cpp Corner.cpp

LOCAL_STATIC_LIBRARIES := libfastcv libfastcvUtils
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_C_INCLUDES += $(JNI_DIR)/fastcv
LOCAL_C_INCLUDES += $(JNI_DIR)

LOCAL_MODULE_OWNER := qcom
LOCAL_PROPRIETARY_MODULE := true

include $(BUILD_SHARED_LIBRARY)

Я пытался изменить некоторые вещи, основываясь на поиске, но пока ничего не помогло. У кого-нибудь есть совет?

1 Ответ

1 голос
/ 29 апреля 2019
LOCAL_PRELINK_MODULE:= false

Это не образец NDK. Это код платформы. Он построен с использованием системы сборки AOSP, а не NDK. См. https://source.android.com/setup/build/building для получения дополнительной информации об этом.

Если вы пытаетесь найти образцы NDK, см. https://github.com/googlesamples/android-ndk.

Если вам действительно нужно построить этот не-NDK-проект с помощью NDK, читайте дальше.


Поиск сообщения об ошибке в $NDK/build часто является хорошим способом найти дополнительную информацию:

$(call __ndk_warning,Module $(LOCAL_MODULE) depends on undefined modules: $(undefined_libs))

# https://github.com/android-ndk/ndk/issues/208
# ndk-build didn't used to fail the build for a missing dependency. This
# seems to have always been the behavior, so there's a good chance that
# there are builds out there that depend on this behavior (as of right now,
# anything using libc++ on ARM has this problem because of libunwind).
#
# By default we will abort in this situation because this is so completely
# broken. A user may define APP_ALLOW_MISSING_DEPS to "true" in their
# Application.mk or on the command line to revert to the old, broken
# behavior.
ifneq ($(APP_ALLOW_MISSING_DEPS),true)
    $(call __ndk_error,Aborting (set APP_ALLOW_MISSING_DEPS=true to allow missing dependencies))
endif

Раньше это игнорировалось, и теперь это ошибка. Это указывает на следующие ошибки:

LOCAL_SHARED_LIBRARIES := liblog

Эта строка ничего не делает. Удали это. Системные библиотеки связаны с LOCAL_LDLIBS, а не LOCAL_SHARED_LIRBARIES. Где-то еще будет похожая строка, вызывающая ошибку для GLESv2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...