Android 使用的 Linker 和传统 Linux 使用的 linker(ld.so,ld-linux.so.2,ld-linux.so.3)不同
模板: hardware/ril/reference-ril/Android.mk
一、编写动态库程序
1、创建my_math.h头文件,里面定义两个函数

#ifndef __MY_MATH_H__
#define __MY_MATH_H__int my_add(int a, int b);
int my_sub(int a, int b);#endif

2、创建my_math.c文件,里面实现两个方法

#include "my_math.h"int my_add(int a, int b)
{return a+b;
}int my_sub(int a, int b)
{return a-b;
}

3、编写Android.mk文件生产so动态库

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)LOCAL_SRC_FILES:= \my_math.c//模块名称
LOCAL_MODULE:= libmymath
//生成32位的so库
LOCAL_MULTILIB := 32LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)

中间文件: out\target\product\sl8541e_cus_go\obj\SHARED_LIBRARIES\libmymath_intermediates
目标文件:out\target\product\sl8541e_cus_go\system\lib\libmymath.so
三、如何使用动态库
1、创建main.c文件,在该文件中引用my_math.h头文件里面方法

#include <stdio.h>
#include "my_math.h"int main(int argc, char *argv[])
{printf("a + b = %d\n", my_add(30, 40));return 0;}

2、编写Android.mk文件并且加载libmymath 动态库

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \main.cLOCAL_C_INCLUDES += \$(LOCAL_PATH)/../libmath
#       $(LOCAL_PATH)/../libcjsonLOCAL_SHARED_LIBRARIES += \libmymath #LOCAL_STATIC_LIBRARIES += \
#   libmycjson LOCAL_CFLAGS += \-Wno-error \-Wno-unused-parameterLOCAL_MODULE:= test
LOCAL_MODULE_TAGS := optional
LOCAL_MULTILIB := 32
include $(BUILD_EXECUTABLE)

目标文件:out\target\product\sl8541e_cus_go\system\bin\test
如何验证
将编译好的so库使用命令推到:adb push /system/lib/
将编译好的可执行文件使用命令推到:adb push /system/bin/
最后执行如下命令运行可执行文件

sl8541e_cus_go:/system/bin # ./test
a + b = 70
sl8541e_cus_go:/system/bin #

Android.mk 编译so动态库以及如何使用so动态库相关推荐

  1. Android NDK编译中在libs\armeabi中加入第三方so库文件的方法

    Android NDK编译中在libs\armeabi中加入第三方so库文件的方法 假设要加入库文件的名字为libffmpeg.so文件 1.要在project\jni目录下新建一目录prebuilt ...

  2. android.mk 编译jar包,Androidmk 使用详解

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点:一.Android.mk 简介二.Android.mk 的基本格式三.Android.mk 深入学习一四. ...

  3. android studio项目改成android.mk编译APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader

    android9系统android studio项目改成用android.mk编译v7包--APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.Pat ...

  4. android.mk编译动态库,安卓之Android.mk多文件以及动态库编译

    1.多文件编译 多文件编译共有两种方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定义当前模块的相对路径 include $(CLEAR_V ...

  5. Android.mk编译java动态库

    一, java动态库程序代码 在Anroid层根目录新建study/java_lib/lib目录, 并创建文件名: com/wq/mytestjar/Test.java package com.wq. ...

  6. 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )

    文章目录 一.Android 平台代码调试器代码 二.Android.mk 构建脚本内容 三.Application.mk 构建脚本内容 四.正式编译 五.博客资源 一.Android 平台代码调试器 ...

  7. Android.mk 编译c语言,编写 android.mk 中 LOCAL_C_INCLUDES 的技巧

    编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录, 一般写成这 ...

  8. android.mk 编译 aidl,c++层使用和编译aidl文件例子

    c++层使用和编译aidl文件可以参考av/camera里的例子 这里给出了一个简化版的工程例子 测试的工程路径为源码路径下的frameworks/native/cmds/bitTube aidl文件 ...

  9. android.mk 编译32位_C/C++初学者常见编译错误及其解决办法

    用户在C/C++集成开发环境(例如 Dev-C++)中编辑了源代码,执行编译之后,常常会因为源代码中存在问题而出现编译错误(它们会显示在编译窗口中).初学者常常会面对这些错误而不知如何处理.本文下面列 ...

最新文章

  1. Linux系统/boot目录破损无法启动怎么办
  2. 5 Best User Interface Design Pattern Libraries
  3. 与詹金斯一起将GitLab中的Gradle项目发布到Artifactory
  4. ActiveMQ消息队列安装和使用
  5. C++基础——有关FILE的那些函数
  6. bash: ssh: command not found解决方法
  7. js如何判断字符串是否为空
  8. python whl文件_python whl是什么文件
  9. 解决jqueryUI img tilte样式不显示问题
  10. 指数分布在生活中的应用_概率论中指数分布的应用
  11. win10无法打开设置,桌面右键显示设置提示ms-settings:display 该文件没有与之关联的程序来执行该操作
  12. 我国会计计算机的发展历程,会计的发展历程是什么
  13. 非匿名方式访问远程的com+
  14. 68013上电“unknown device
  15. hp进系统卡在w ndows界面,惠普电脑一直卡在正在启动windows怎么办
  16. Apache 、Nginx 、Squid 的区别
  17. 荣耀平板2 android go,荣耀平板2和华为M2哪个好?华为荣耀平板2和华为M2详细区别对比评测_硬件教程...
  18. 金属晶体学之基本概念(一)
  19. 中国疏水喷雾市场趋势报告、技术动态创新及市场预测
  20. python调用node_node-python:在nodejs中调用python代码

热门文章

  1. 美的华为鸿蒙,美的鸿蒙家电正式上线!华为鸿蒙系统,你很快就能用上!
  2. 七天学会html5和css3之重点标签介绍(20)
  3. 区块链储存类项目发展报告|链塔智库
  4. UCloud 的安全秘钥(简单)解题报告
  5. RMAN备份之备份多个备份集到带库(一)
  6. 小小扎马-Java生成指定范围和跳过指定数字的代码
  7. 投资理财-股市是称重机吗?
  8. [附源码]Java计算机毕业设计SSM菜鸟驿站快递分发系统
  9. 本地启动出错Unable to start ServletWebServerApplicationContext due to miss ServletWebServerFactory bean
  10. xctf-HTTP通常使用两种请求方法