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(可以任意指定路径)
这两种方式都是可以的。
在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(可以任意指定路径)
这两种方式都是可以的。
相关文章推荐
- android下java的静态库和动态库
- android动态库和静态库的编译
- android开发 NDK编译和使用静态库、动态库
- Android 导入第三方静态库编译成动态库 c_a_so
- Android笔记---开发 NDK 编译和使用静态库、动态库
- Android.mk的用法|静态库|动态库
- android开发 NDK 编译和使用静态库、动态库
- linux/Android常用Makefile模板(静态库、动态库,可执行程序)总结
- android开发 NDK 编译和使用静态库、动态库 (转)
- android开发 NDK 编译和使用静态库、动态库
- Android–带有动态库、静态库、Jar包的makefile编写
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- NDK学习三:[转载] android开发 NDK 编译和使用静态库、动态库 3ff0
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- Android开发 NDK 编译和使用静态库、动态库 (转)
- NDK 编译和使用静态库、动态库; Android.mk 文件语法详解; Android.mk高级写法