Android Android.mk使用三方库

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := alpu_all_test
LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/function/SHARE_CODE
    
LOCAL_SRC_FILES := $(call all-subdir-c-files)
#LOCAL_STATIC_LIBRARIES := \
#    libalpu_fa_000_static
LOCAL_LDFLAGS := $(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/alpu_fa_000_YunCong_20190530.a
#LOCAL_LDLIBS := -L$(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/ -lalpu_fa_000_YunCong_20190530
#LOCAL_SHARED_LIBRARIES := 
#LOCAL_CFLAGS += -Wall -Wno-unused-parameter -std=gnu99 
#LOCAL_WHOLE_STATIC_LIBRARIES := alpu_fa_000_static
include $(BUILD_EXECUTABLE)

include $(call all-makefiles-under, $(LOCAL_PATH))
#include $(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/Android.mk

方案:

(1)使用LOCAL_LDFLAGS 导入本地库的全路径,也可-L+库路径   + -l+库名称

(2)使用LOCAL_LDLIBS 例-L$(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/ (库路径,前加-L)

-lalpu_fa_000_YunCong_20190530(库名称,注意前加-l),也可直接写库全路径,如$(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/alpu_fa_000_YunCong_20190530.a

以上两个LOCAL变量的两种方法(库(.a .so)全路径或-L + -l)在Android6.0上都可以使用,在Android8.1上只有库全路径的方式可以使用,如果使用(-L + -l)的方式不会在本地找库,会直接去out目录下找库(默认找动态库)和LOCAL_SHARED_LIBRARIES有点类似

(3)LOCAL_SHARED_LIBRARIES 和 LOCAL_STATIC_LIBRARIES,此种方式只会去out下找对应得库,需要库文件先编译到out下

若是已经编译好的库需要使用预编译include $(BUILD_PREBUILT),如:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX := .a
LOCAL_MODULE := libalpu_fa_000_static
LOCAL_SRC_FILES := alpu_fa_000_YunCong_20190530.a
#include $(BUILD_STATIC_LIBRARY)
#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_PREBUILT)

Android8.1已经将PREBUILT_STATIC_LIBRARY和PREBUILT_SHARED_LIBRARY 两个宏废弃,统一使用BUILD_PREBUILT预编译,通过LOCAL_MODULE_CLASS来指定编译文件类型。

另外预编译库不能使用BUILD_STATIC_LIBRARY和BUILD_SHARED_LIBRARY,使用这两个虽然不会报错,但会有警告,生成的库文件是空的,无法使用。

LOCAL_MULTILIB:=32/64/both  来指定使用的库是32位还是64位,32位库生成在out.../obj_arm

64位库生成在out.../obj/

猜你喜欢

转载自blog.csdn.net/u013463707/article/details/90754571
今日推荐