Android.mk 编译so动态库以及如何使用so动态库
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动态库相关推荐
- Android NDK编译中在libs\armeabi中加入第三方so库文件的方法
Android NDK编译中在libs\armeabi中加入第三方so库文件的方法 假设要加入库文件的名字为libffmpeg.so文件 1.要在project\jni目录下新建一目录prebuilt ...
- android.mk 编译jar包,Androidmk 使用详解
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点:一.Android.mk 简介二.Android.mk 的基本格式三.Android.mk 深入学习一四. ...
- android studio项目改成android.mk编译APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
android9系统android studio项目改成用android.mk编译v7包--APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.Pat ...
- android.mk编译动态库,安卓之Android.mk多文件以及动态库编译
1.多文件编译 多文件编译共有两种方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定义当前模块的相对路径 include $(CLEAR_V ...
- Android.mk编译java动态库
一, java动态库程序代码 在Anroid层根目录新建study/java_lib/lib目录, 并创建文件名: com/wq/mytestjar/Test.java package com.wq. ...
- 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
文章目录 一.Android 平台代码调试器代码 二.Android.mk 构建脚本内容 三.Application.mk 构建脚本内容 四.正式编译 五.博客资源 一.Android 平台代码调试器 ...
- Android.mk 编译c语言,编写 android.mk 中 LOCAL_C_INCLUDES 的技巧
编写 android.mk 中 LOCAL_C_INCLUDES 的技巧 在编写android.mk的过程中,免不了要修改LOCAL_C_INCLUDES来设置头文件的include目录, 一般写成这 ...
- android.mk 编译 aidl,c++层使用和编译aidl文件例子
c++层使用和编译aidl文件可以参考av/camera里的例子 这里给出了一个简化版的工程例子 测试的工程路径为源码路径下的frameworks/native/cmds/bitTube aidl文件 ...
- android.mk 编译32位_C/C++初学者常见编译错误及其解决办法
用户在C/C++集成开发环境(例如 Dev-C++)中编辑了源代码,执行编译之后,常常会因为源代码中存在问题而出现编译错误(它们会显示在编译窗口中).初学者常常会面对这些错误而不知如何处理.本文下面列 ...
最新文章
- Linux系统/boot目录破损无法启动怎么办
- 5 Best User Interface Design Pattern Libraries
- 与詹金斯一起将GitLab中的Gradle项目发布到Artifactory
- ActiveMQ消息队列安装和使用
- C++基础——有关FILE的那些函数
- bash: ssh: command not found解决方法
- js如何判断字符串是否为空
- python whl文件_python whl是什么文件
- 解决jqueryUI img tilte样式不显示问题
- 指数分布在生活中的应用_概率论中指数分布的应用
- win10无法打开设置,桌面右键显示设置提示ms-settings:display 该文件没有与之关联的程序来执行该操作
- 我国会计计算机的发展历程,会计的发展历程是什么
- 非匿名方式访问远程的com+
- 68013上电“unknown device
- hp进系统卡在w ndows界面,惠普电脑一直卡在正在启动windows怎么办
- Apache 、Nginx 、Squid 的区别
- 荣耀平板2 android go,荣耀平板2和华为M2哪个好?华为荣耀平板2和华为M2详细区别对比评测_硬件教程...
- 金属晶体学之基本概念(一)
- 中国疏水喷雾市场趋势报告、技术动态创新及市场预测
- python调用node_node-python:在nodejs中调用python代码
热门文章
- 美的华为鸿蒙,美的鸿蒙家电正式上线!华为鸿蒙系统,你很快就能用上!
- 七天学会html5和css3之重点标签介绍(20)
- 区块链储存类项目发展报告|链塔智库
- UCloud 的安全秘钥(简单)解题报告
- RMAN备份之备份多个备份集到带库(一)
- 小小扎马-Java生成指定范围和跳过指定数字的代码
- 投资理财-股市是称重机吗?
- [附源码]Java计算机毕业设计SSM菜鸟驿站快递分发系统
- 本地启动出错Unable to start ServletWebServerApplicationContext due to miss ServletWebServerFactory bean
- xctf-HTTP通常使用两种请求方法