• Android下Native的so编译:使用ndk-build.cmd/.sh


    最近将一个DLL库移植至安卓下,编译出so文件。

    经历makefile、cmake等等的入门到放弃.....

    最后还是使用android的ndk编译命令来解决

    每个NDK文件下,均包含的是所有工具链、头文件、库文件等

    执行ndk-build命令,诸如:D:10.AndroidSDK dkandroid-ndk-r15b dk-build.cmd,则是使用R15版本的NDK编译

    ndk-build编译时,会在指定工作目录下查找jni/Android.mk及jni/Application.mk,这两个文件也是标准makefile

    Application.mk中定义一个APP下所有的选项,诸如编译几个ABI、编译时使用什么STL

    示例:

    # 不写 APP_ABI 会生成全部支持的平台,目前支持:armeabi arm64-v8a armeabi-v7a
    # APP_ABI := armeabi arm64-v8a armeabi-v7a mips mips64 x86 x86_64
    # APP_ABI := all
    APP_ABI := arm64-v8a
    APP_STL := c++_static

    Android.mk则定义一个或多个模块的编译,限定了相应宏来确定模块名、相应源代码文件

    示例:

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    # 要生成的.so库名称。java代码System.loadLibrary("hello");加载的就是它
    LOCAL_MODULE := XXXXXX
    
    # C++文件
    LOCAL_SRC_FILES :=  ../src/XXX/AAA.cpp 
                        ../src/XXX/BBB.cpp  
                        ../src/XXX/base64/CBase64.cpp  
                        ../src/XXX/BB/FF.cpp
                        
    
                        
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/../inc $(LOCAL_PATH)/../src/XXX
    
    LOCAL_CFLAGS := -DXXX_EXPORT
    
    LOCAL_LDLIBS := -luvc -lusb100 -ljpeg-turbo1500
    
    LOCAL_LDFLAGS := -L$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI) -lm -llog
    
    # LOCAL_LDFLAGS := -L$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI)-luvc -lusb100 -ljpeg-turbo1500 -lm -llog
    
    include $(BUILD_SHARED_LIBRARY)

    LOCAL_MODULE指定的是模块名
    LOCAL_SRC_FILES指定相应的源代码文件

    其中Android.mk中使用的宏名TARGET_ARCH_ABI,即Application.mk下面APP_ABI的当前项ABI
    include $(BUILD_SHARED_LIBRARY)表示编译的是一个共享库

    如果想编译多个模块,则应该在
    include $(BUILD_SHARED_LIBRARY)后面,使用include $(CLEAR_VARS)清除变量,
    增加更多模块。
     
     


  • 相关阅读:
    学习进度条40
    学习进度条39
    学习进度条38
    学习进度条37
    学习进度条36
    iReport5.6.0使用说明
    Mysql 如何创建一张临时表
    SQL语句出现sql关键字
    SQL-order by两个字段同时排序
    js中==和===区别
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/11463071.html
Copyright © 2020-2023  润新知