linux生成androidso,生成android手机上使用的so库

so库是分平台的,android手机用的是arm芯片,所以用gcc编译so库时需要用ndk中的arm-linux-androideabi-gcc来生成,才可以用于android手机。

首先,在android官网上下载ndk。

解压后,进入android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin目录,会发现所有gcc支持的交叉编译的命令。

编译命令示例如下:

./arm-linux-androideabi-gcc /home/ting/workspace/test/com_example_test_jni_JniKey.c -I ../../../../../platforms/android-18/arch-arm/usr/include/ -L ../../../../../platforms/android-18/arch-arm/usr/lib/ -fPIC -shared -o libkey.so

其中,./arm-linux-androideabi-gcc是编译命令;

-I指明了需要使用的jni.h等头文件所在的目录;

-L指明了需要使用的so库所在的目录;

除此之外,用如上命令执行会说找不到crtbegin_so.o和crtend_so.o这两个文件,因为他们是静态文件,所以在ndk目录下搜索到这两个文件,将其copy到当前路径,就ok了。

android工程中的so库需要放在libs/armeabi目录下,才会被应用程序检测到。

在android代码中使用如下代码加载so库。

static {

System.loadLibrary("key");

}

其中,需要注意的是,比如动态链接库的名字是libkey.so,在代码中加载时要加载的名称是key。即去掉前面的lib和后面的.so。

另外,so库中的jni相应代码的函数名是Java_包名_类名_函数名,因此必须和相应包的相应类相对应,否则会找不到native方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值