首页 > 解决方案 > 错误:SHARED_LIBRARIES 缺少 STATIC_LIBRARIES Android.mk

问题描述

我有一个 android 应用程序,它也有 c++ 代码依赖项。

我想通过使用 AOSP 编译将此应用程序构建为系统应用程序。

在我的 android.mk 中,我必须先导入一个静态库 (abc.a),然后使用它来构建一个共享库 (xyz.so)。

我面临构建错误为“错误:xyz (SHARED_LIBRARIES android-arm64) 缺少 abc (STATIC_LIBRARIES android-arm64)”

安卓.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := abc
LOCAL_SRC_FILES := $(LOCAL_PATH)/$(TARGET_ARCH_ABI)/abc.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
#LOCAL_LDFLAGS := -llog -ldl
LOCAL_MODULE    := libxyz
LOCAL_SRC_FILES := \
                xyz.cpp \
                xyz1.cpp        
LOCAL_STATIC_LIBRARIES := abc
LOCAL_CFLAGS += -Wall -Werror -Wno-unused-parameter -Wno-switch
#LOCAL_SDK_VERSION := 19
#LOCAL_NDK_STL_VARIANT := c++_static # LLVM libc++
include $(BUILD_SHARED_LIBRARY)  

Cmakelists:

cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library.
             abc
             # Sets the library as a shared library.
             SHARED
             # Provides a relative path to your source file(s).
             src/main/cpp/abc.cpp
             src/main/cpp/abc.hxx
            ......................)

find_library( # Sets the name of the path variable.
              log-lib
              log pthread)

add_library( xyz
             STATIC
             IMPORTED )

 set_target_properties( # Specifies the target library.
                        xyz
                        # Specifies the parameter you want to define.
                        PROPERTIES IMPORTED_LOCATION
                        # Provides the path to the library you want to import.
                        ../../../../${ANDROID_ABI}/xyz.a )

target_link_libraries( # Specifies the target library.
                       abc
                       xyz ${log-lib} )

附上错误截图。

在此处输入图像描述

标签: androidc++android-ndkandroid-sourceandroid.mk

解决方案


平台构建系统与 NDK 使用的不同。没有PREBUILT_STATIC_LIBRARYor之类的规则PREBUILT_SHARED_LIBRARY,所以这些规则没有被执行。平台使用BUILD_PREBUILT,您必须指定您的LOCAL_MODULE_CLASS. 有关示例,请参见https://android.googlesource.com/platform/packages/apps/Dialer/+/refs/heads/master/Android.mk 。

该平台完全不支持 CMake。

您也可能不想在平台中使用 Android.mk。该构建系统(与 ndk-build 无关)已经退出了好几年。您需要按照https://source.android.com/setup/build的描述使用 Soong 。


推荐阅读