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

时间:2021-05-24 13:21:19

标签: android clang++

我在 SO 上看到了多个关于 android.mk 的“链接”问题的其他类似问题,但没有一个与我的问题接近。

我有一个 Android 项目,它从源代码创建一个基本的共享 C++ 库,并且应该链接到另一个共享库。

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

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

这里是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'

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

这里出了什么问题?

编辑: 我暂时删除了该库以确保找到它。如果它不存在,我有一个特定的错误消息。这意味着问题出在别处。我还可以确认在应用程序子目录中找不到共享库。

我也有这个“警告?”、“错误?”:

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 目录中删除了?

2 个答案:

答案 0 :(得分:0)

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

Android.mk seems not to exist

答案 1 :(得分:0)

问题通过添加解决

include $(CLEAR_VARS)

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

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