android.mk: 未找到预构建的共享库

android.mk: prebuilt shared library not found

我在 SO 上看到了关于 'linking' 问题的多个其他类似问题 android.mk 但其中 none 接近我的问题。

我有一个 Android 项目,它从源代码创建一个基础共享 C++ 库,应该 link 到另一个共享库。

我遵循了 the instructions 非常清晰和基本的内容。

基础共享库编译正常,但在 link 时,它告诉我找不到引用的共享库。

这里是 Android.mk 文件的源代码:

# ./android/app/src/main/jni/Android.mk

# Set up paths
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# specify libcardios prebuilt shared library
LOCAL_MODULE := libcardios
LOCAL_SRC_FILES := $(LOCAL_PATH)/../../../../../third_party_src/cpp/libcardios/$(TARGET_ARCH_ABI)/libcardios_$(TARGET_ARCH_ABI).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../../../third_party_src/cpp/libcardios/includes
include $(PREBUILT_SHARED_LIBRARY)

# main shared library    

# Debug mode
NDK_DEBUG=1

# Specify C++ flags
LOCAL_CPPFLAGS := -std=c++11
LOCAL_CPPFLAGS += -fexceptions
LOCAL_CPPFLAGS += -frtti
LOCAL_CPPFLAGS += -Wall
LOCAL_CPPFLAGS += -Wextra
# Header search paths
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../generated_src/djinni_bridge/jni
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../generated_src/djinni_bridge/cpp
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../generated_src/support-lib/jni
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../generated_src/support-lib
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../src/cpp
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../generated_src/support-lib/cpp
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../third_party_src/cpp
LOCAL_CPPFLAGS += -I$(LOCAL_PATH)/../../../../../third_party_src/cpp/data

# Specify source files
LOCAL_SRC_FILES += $(LOCAL_PATH)/../../../../../generated_src/djinni_bridge/jni/NativeDataBridge.cpp
LOCAL_SRC_FILES += $(LOCAL_PATH)/../../../../../ios/data_bridge_impl.cpp
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/../../../../../generated_src/support-lib/jni/*.cpp)
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/../../../../../generated_src/support-lib/cpp/*.cpp)
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/../../../../../generated_src/djinni_bridge/cpp/*.cpp)
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/../../../../../third_party_src/cpp/data/*.cpp)

LOCAL_SHARED_LIBRARIES := libcardios

# Specify module name for System.loadLibrary() call
LOCAL_MODULE := databridge

# include additional libraries
LOCAL_LDLIBS += -llog

# Telling make to build the library

include $(BUILD_SHARED_LIBRARY)

这是我收到的错误消息:

clang++: error: no such file or directory: '/Users/omatrot/Documents/sensoria_analyics/application/android/app/build/intermediates/ndkBuild/debug/obj/local/arm64-v8a/libcardios_arm64-v8a.so'

我的印象是找不到预构建的共享库,因此没有复制到中间文件夹中。

这里出了什么问题?

编辑: 我暂时删除了图书馆以确保找到它。如果不存在,我会收到一条特定的错误消息。这意味着问题在其他地方。我还可以确认在应用程序子目录中找不到共享库。

我也有这个'warning?','error?':

make: Circular /Users/omatrot/Documents/sensoria_analyics/application/android/app/build/intermediates/ndkBuild/debug/obj/local/arm64-v8a/libcardios_arm64-v8a.so <- /Users/omatrot/Documents/sensoria_analyics/application/android/app/build/intermediates/ndkBuild/debug/obj/local/arm64-v8a/libcardios_arm64-v8a.so dependency dropped.

这是否意味着共享库终于从 obj 目录中删除了?

Android.mk文件属于旧时代。 检查此解决方案

问题已通过添加

解决
include $(CLEAR_VARS)

在共享库模块和主库模块之间。

这似乎是分隔模块的标记,如下面 blog post 所示。