zoukankan      html  css  js  c++  java
  • Android NDK 使用自己的共享库(Import Module)

     LOCAL_PATH := $(call my-dir)//标准mk语句,指编译路径,所有mk文件第一句都是这个

    /**这个模块表示引用了一个本地的静态库
    include $(CLEAR_VARS) //清除各种变量,因为这些变量是静态全局的,如果清除,下次编译时又会用到这些变量造成出错
    LOCAL_MODULE    := libopencore-amrnb  //本地静态库模块的名字,这个名字在下面编译jni时需要引用
    LOCAL_SRC_FILES := lib/libopencore-amrnb.a //本地静态库文件地址
    include $(PREBUILT_STATIC_LIBRARY)  //PREBUILT_STATIC_LIBRARY表示先build一个静态库
    **/

    /**这个模块表示引用了一个本地的动态链接库
    include $(CLEAR_VARS) //同上 www.2cto.com
    LOCAL_MODULE    := libswscale  //本地动态库模块的名字
    LOCAL_SRC_FILES := lib/libswscale.so //本地动态库文件位置
    include $(PREBUILT_SHARED_LIBRARY) //表示先build这个动态链接库

    http://blog.csdn.net/smfwuxiao/article/details/6591927

    NDK r5 开始支持预编译共享库。预编译共享库就是从其他地方获得源码编译出的共享库,而不是Android系统自带的。方法如下:
    1、声明共享库模块
    把共享库声明为一个独立模块。假如 libfoo.so 与 Android.mk 位于同一目录。则 Android.mk 应该这样写:

    [plain] view plaincopy
     
    1. LOCAL_PATH := $(call my-dir)  
    2.   
    3. include $(CLEAR_VARS)  
    4. LOCAL_MODULE := foo-prebuilt     # 模块名  
    5. LOCAL_SRC_FILES := libfoo.so     # 模块的文件路径(相对于 LOCAL_PATH)  
    6.   
    7. include $(PREBUILT_SHARED_LIBRARY) # 注意这里不是 BUILD_SHARED_LIBRARY  

    这个共享库将被拷贝到 $PROJECT/obj/local 和 $PROJECT/libs/<abi> (strip过的)

    2、在其他模块中引用这个共享库
        在 Android.mk 中,将这个共享库的模块名加入 LOCAL_STATIC_LIBRARIES (静态库)或 LOCAL_SHARED_LIBRARIES (动态库)
    例如, 使用 libfoo.so 的方法:

    [plain] view plaincopy
     
    1. include $(CLEAR_VARS)  
    2. LOCAL_MODULE := foo-user  
    3. LOCAL_SRC_FILES := foo-user.c  
    4. LOCAL_SHARED_LIBRARY := foo-prebuilt  
    5. include $(BUILD_SHARED_LIBRARY)  

    3、为共享库导出头文件

        这个共享库一般有相应的头文件,比如 libfoo.so 就有 foo.h。

    一个简单方法(在Android.mk中写):    

    [plain] view plaincopy
     
    1. include $(CLEAR_VARS)  
    2. LOCAL_MODULE := foo-prebuilt  
    3. LOCAL_SRC_FILES := libfoo.so  
    4. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include  
    5. include $(PREBUILT_SHARED_LIBRARY)  

        这样,使用该共享库的模块就会在它的 LOCAL_C_INCLUDES 变量加入该头文件搜索路径。
    4、调试共享库
        建议你的共享库保留调试信息。 $PROJECT/libs/<abi> 目录下的共享库都是 strip 之后的(没有调试信息)。有调试信息的版本可被ndk-gdb使用。

    5、共享库 ABI
        你的共享库与目标系统ABI的兼容性很重要。
        请检查 TARGET_ARCH_ABI,有以下值:
            armeabi      =>  ARMv5TE 以上
            armeabi-v7a  =>  ARMv7 以上
            x86              =>  x86
        建议: armeabi ABI 可以运行在所有 ARM CPU 上。

  • 相关阅读:
    Mac部署hadoop3.2.1(伪分布式) ,Hadoop自带的MapReduce程序(wordcount),,,,安装scala,hadoop安装启动问题,Pyspark开发环境搭建,MAC Spark安装和环境变量设置
    使用objdump objcopy查看与修改符号表
    alias, bg, bind, break, builtin, caller, cd, command,
    virtualbox端口转发
    CMake快速入门教程-实战
    内存管理
    http调试工具,linux调试工具
    CSS Background
    RadioButton的check改变的时候
    Docs-->.NET-->API reference-->System.​Web.​UI.​Web​Controls-->Repeater
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/4514650.html
Copyright © 2011-2022 走看看