JAVA调用C语言写的SO文件
作者:网络转载 发布时间:[ 2014/11/14 10:22:29 ] 推荐标签:Java 接口技术 命令
试着去完成,自己生成了一份com_test_GetMsg.h头文件,并完成test.c,生成libtest.so文件,JAVA调用SO文件时,屡次报:
failed: Cannot load library: load_library(linker.cpp:761): not a valid ELF executable: /data/app-lib/com.example.iccommtest-libtest.so
也是提供的SO无法load,是valid的。
注意,刚才引用的实例是JAVA调用SO,而我需要的是android调用SO,不然会频繁上面错误。
原因有两点:
1、JAVA和android的虚拟环境不一样
2、Linux和android的系统库文件不一样
这样导致了在Linux下通过JNI标准命名方式编译的SO文件,在android是调用失败的,原因是Linux和android的系统库不一样,而生产的SO跟生产环境库文件有依赖关系,然后搭建了NDK和Cywin环境,然后生产的SO可以被android调用,
那么SO文件必须完全遵循JNI命名规则,方法名是这样:
/*
* Class: com_samples_jni_test
* Method: GetMsg
* Signature: ()V
*/
JNIEXPORT jstring JNICALL Java_com_samples_jni_test_GetMsg
(JNIEnv *, jobject);
通过NDK和Cywin生产libtest.so,android调用成功!
相关推荐

更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11