Android下使用dlopen函数动态调用.so链接库
来源:互联网 发布:java 回调函数观察者 编辑:程序博客网 时间:2024/06/05 10:59
在这篇文章(【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为大数。
- 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实现
- Linux初步学习 (二)
- eclipse配置svn
- WHERE&过滤和排序
- linq,linq to sql
- android_新浪微博布局学习——妙用TabHost
- Android下使用dlopen函数动态调用.so链接库
- NoSQL数据库笔谈
- svn update 之后文件状态解释
- 开发基于Safari的wap网站时,本地数据存储(sessionStorage localStorage sqlite)小结
- 使用本地IP不能访问Mysql的问题
- 手把手教你把Vim改装成一个IDE编程环境
- js高级
- 有关Linux的.a、.so和.o文件(一)
- 获取选中TableViewCell的index