Android下使用dlopen函数动态调用.so链接库
来源:互联网 发布:即时通讯软件开发方案 编辑:程序博客网 时间:2024/06/05 09:39
原文:http://hi.baidu.com/mcu99/blog/item/389a6fde38f69950cdbf1a75.html
在这篇文章(【09.03.25】Linux环境中dlopen函数的简单应用)中。实现了在UBUNTU LINUX环境下使用dlopen函数动态调用.so链接库。但是也提到了在Android下未能成功。由于Android也是使用linux内核,因此估计程序本身可能并没有什么错误,问题应该是出现在Android.mk文件中。今天早上试着修改了一下Android.mk,终于将这个问题解决了。好在两个C程序和一个.mk文件并不是太长,现将它们贴一遍
/*************************** dl1.c *******************************/
#include<stdio.h>
#include<stdlib.h>
#include<dlfcn.h>
int main()
{
int a,b;
void *p;
int (*func)(int,int);
scanf("%d%d",&a,&b);
p=dlopen("./dl2.so",RTLD_NOW);
if(p==NULL)
{
printf("dlopen error!\n");
exit(0);
}
else
printf("dlopen ok!\n");
func=dlsym(p,"max");
printf("%d与%d相比,%d为大数。\n",a,b,(*func)(a,b));
dlclose(p);
}
/*************************** dl1.c *******************************/
/*************************** dl2.c *******************************/
#include<stdio.h>
int max(int x,int y)
{
return x>y?x:y;
}
/*************************** dl2.c *******************************/
/*************************** Android.mk *******************************/
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
dl2.c
LOCAL_PRELINK_MODULE := true
#LOCAL_CFLAGS=-fPIC
LOCAL_MODULE:= dl2
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
dl1.c
LOCAL_SHARED_LIBRARIES := \
libdl
#LOCAL_CFLAGS=-ldl
LOCAL_PRELINK_MODULE := true
LOCAL_MODULE:= dl1
include $(BUILD_EXECUTABLE)
/*************************** Android.mk *******************************/
上一次之所以失败,原因似乎是使用了红色字体的那一句,因为我将其更换为蓝色字体的那一句,问题就解决了。看来这样写在链接时才能正确找到libdl.so,而包含该.so文件是使用dlopen函数的保证。
将这三个文件放在Android源码目录下的development目录下的dl文件夹中(dl文件夹是新建的),然后在终端中使用root权限进入到Android源码目录下,执行 make dl1。成功后将会在android源码目录/out/target/product/generic/system/lib/中生成dl2.so动态链接库文件,在android源码目录/out/target/product/generic/system/bin/中生成dl1可执行文件。
使用以下命令将它们放入Android模拟器,注意要先启动emulator
adb push Android源码目录/out/target/product/generic/system/lib/dl2.so /data
adb push Android源码目录/out/target/product/generic/system/bin/dl1 /data
进入data文件夹执行
adb shell
# cd data
# ./dl1
87 9(这里随便输入两个数)
dlopen ok!
87与9相比,87为大数。
0
上一篇:Android系统中调试动态链接库so文件的步骤
下一篇:Hello World C program using Android Toolchain
相关热门文章
- View与ViewGroup的概念
- 动态修改LVS real server配置...
- Wpf使用Label Grid实现列表...
- 科学上网:用 VPS 搭建 shadow...
- saltstack批量部署并配置nginx...
- SHTML是什么_SSI有什么用...
- shell中字符串操作
- 卡尔曼滤波的原理说明...
- 关于java中的“错误:找不到或...
- shell中的特殊字符
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- Android下使用dlopen函数动态调用.so链接库
- Android下使用dlopen函数动态调用.so链接库
- Android下使用dlopen函数动态调用.so链接库
- Android下使用dlopen函数动态调用.…
- Android下使用dlopen函数动态调用.…
- Android下使用dlopen函数动态调用.…
- Android下使用dlopen函数动态调用.…
- Android下动态链接库.so调用的简单例子
- Android下动态链接库.so调用的简单例子
- Android下动态链接库.so调用的简单例子
- LINUX下动态链接库dlopen dlsym dlclose函数使用说明
- LINUX下动态链接库dlopen dlsym dlclose函数使用说明
- 动态链接库dlopen的函数的使用
- 动态链接库dlopen等函数的使用
- 动态链接库dlopen的函数的使用
- android 中调用 so 动态链接库
- 动态库的动态链接、打开、调用,使用dlopen、dlsym和dlclose
- Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现
- Android程序员的进阶之路
- eclipse下如何将android项目生成apk
- Android系统中调试动态链接库so文件的步骤
- cocos2dx常见49种Action
- foxmail 联系人创建组群
- Android下使用dlopen函数动态调用.so链接库
- Hello World C program using Android Toolchain
- poi划斜线
- 教你在VS2005下写MakeFile
- 在VC里如何用Makefile文件编译?
- ADT20新建项目Android Support library not installed问题
- Android SDK更新失败的解决方法
- 随堂笔记
- VC++ Watch窗口查看指针指向的数组
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
岛屿的英文
失落的岛屿
岛屿旅游
爱情岛屿论坛
时间停止岛屿攻略
中国岛屿面积排名
2018年南海岛屿实际控制图高清
泰国岛屿有哪些
马尔代夫岛屿排名
中国岛屿排名
欢迎来到时间停止岛屿攻略
方舟中心岛完美建家点
岛弧
岛柜尺寸
超市岛柜
超市冷冻岛柜
面包边岛柜价格
岛柜展示柜
中岛柜展示柜
中岛展示柜
中岛柜尺寸
蛋糕中岛柜
超市岛柜尺寸
中岛柜货架
富雪岛保鲜柜
冷冻柜岛柜
海尔岛柜
海尔超市岛柜
天堂岛之歌歌词
岛歌
三岛津
岛津
三岛津奈子
三岛奈津子高清在线播放
岛津熏
三岛奈津子在线
水岛津石
岛津义弘
三岛奈津子在线播放
水岛津
三岛奈津子中文字幕在线播放