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

這兩種方式都是可以的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章