Android 动态库和静态库

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

在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值