Android下动态链接库.so调用的简单例子

在这篇文章中( http://hi.baidu.com/mcu99/blog/item/216f1fce17e1c00b92457edd.html ),我在Android下使用dlopen函数调用.so文件没有成功,于是只得改用在编译过程中指定.so文件的方式加以调用,这次在Android下倒是通过了。

先在(Android源码目录)/development/目录下建立一个文件夹,比如起名叫 test123

在test123目录下建立以下三个文件:test.c、max.c、Android.mk

/**************** test.c 主程序 ********************/
#include<stdio.h>
extern max(int,int);
int main()
{
    int a=5,b=3,c;
    c=max(a,b);
    printf("%d与%d相比,%d大。\n",a,b,c);
    return 0;
}

/**************** max.c 将要被编译成动态链接库 ********************/
int max(int x,int y)
{
    return x>y?x:y;
}

/**************** Android.mk 是Android系统中的Makefile文件 ********************/
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
    max.c
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE:= libmax
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
    test.c
LOCAL_CFLAGS=-lmax
LOCAL_LDFLAGS:= \
    -Lout/target/product/generic/obj/lib
LOCAL_SHARED_LIBRARIES := \
    libmax
LOCAL_MODULE:= test
include $(BUILD_EXECUTABLE)


建立好这三个文件后,用cd命令回到Android源码目录下,执行make test。注意不是文件夹名 test123

再用命令 
adb push (Android源码目录)/out/target/product/generic/system/bin/test /data
adb push out/target/product/generic/system/lib/libmax.so /system/lib
将test程序和编译好的libmax.so送进模拟器下相应的位置,其中libmax.so应该放到 /system/lib下,不然test找不到它,test程序就无所谓了,放在什么地方都行。

用adb shell进入模拟器的控制台,当然事先要先把emulator启动起来,否则adb shell会失败。

进入test所在目录,./test运行
# ./test

5与3相比,5大。



http://hi.baidu.com/mcu99/item/4e0566283967698a6f2cc374

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值