Android 动态库和静态库

来源:互联网 发布:不可思议迷宫 知乎 编辑:程序博客网 时间:2024/05/17 23:22

一、指定库文件生成到哪个目录

在Android.mk文件中,可以指定最后的目标安装路径,

LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:

TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。
用法如:
 CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

二、静态库

1) 生成静态库

     #Test Static Lib
     LOCAL_PATH := $(call my-dir)
     include $(CLEAR_VARS)
     LOCAL_SRC_FILES:= /
              helloworld.c
     LOCAL_MODULE:= libtest_static
     #LOCAL_C_INCLUDES :=
     #LOCAL_STATIC_LIBRARIES :=
     #LOCAL_SHARED_LIBRARIES :=
    include $(BUILD_STATIC_LIBRARY)   

   # BUILD_STATIC_LIBRARY means generate a static library

三、 动态库

1)生成动态库

#Test Shared Lib
     LOCAL_PATH := $(call my-dir)
     include $(CLEAR_VARS)
     LOCAL_SRC_FILES:= /
              helloworld.c
     LOCAL_MODULE:= libtest_shared
     TARGET_PRELINK_MODULES := false
     #LOCAL_C_INCLUDES :=
     #LOCAL_STATIC_LIBRARIES :=
     #LOCAL_SHARED_LIBRARIES :=      

    include $(BUILD_SHARED_LIBRARY)

#BUILD_SHARED_LIBRARY  means a dynamic   lib

 

四、库的调用

1)编写my_add.c源文件

/*
my_add.c
*/
#include <stdio.h>
int add(int x, int y)
{    
    int sum = x + y;
    printf("The sum of %d and %d is %d\n", x, y, sum);
    return sum;
}

对应的mk文件

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= my_add.c
LOCAL_MODULE:=libmy_add
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)       

写好源文件和mk文件之后可以编译,生成库文件

2)调用库函数

写库文件的头函数

/*
my_add.h
*/
int add(int x, int y);    //对需要调用的函数在这个头文件里头进行声明

 

写调用库函数的程序的源文件

/*
libtest.c
*/
#include<stdio.h>
#include"my_add.h"      //注意在这里把头文件包括进来


int main()
{
   add(3,4);           //库里面的函数
   printf("Done\n");
   return 0;
}

编写要用的mk文件

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=libtest.c
LOCAL_MODULE:=lib_test
LOCAL_SHARED_LIBRARIES:=libmy_add      //my_add 是要引用的库文件名字,可以指定库所在的路径,如果不确定路径,则生成动态库和引                                         //用动态库都采用默认路径

 

3)android.mk指定第三方的静态库路径

我们知道在android.mk里面包含着

    LOCAL_STATIC_LIBRARIES := libxml2

    但是这个静态库的路径是固定的

如果我们想自己找个路径使其能够识别那么我们就可以使用下面的办法:

LOCAL_LDLIBS += -lxml

或者

LOCAL_LDFLAGS += $(LOCAL_PATH)/libtest.a(可以任意指定路径)

这两种方式都是可以的。


0 0
原创粉丝点击