您的位置:首页 > 移动开发 > Android开发

Android 动态库和静态库

2015-01-17 17:16 169 查看
一、指定库文件生成到哪个目录

在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(可以任意指定路径)

这两种方式都是可以的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: