java调用so文件

java调用so文件

  • 调用方法主要是是使用jdk自带的jni来调用,思路如下:
  1. 新建java对象,实现方法TestNative.java为 public native String XXX();
  2. 使用dos命令来编译该类名,javah 包名.TestNative,得到.h文件,然后根据.h文件自己编写.c文件,在该c文件中调用需要调用的接口。
  3. 可分为c和c++,将调用形式分为两种,数据参数格式转化也分为两种,具体例子如:env->XXX(参数),这是c++,c是 (*env)->XXX(env,参数)。
  4. 最后使用命令将已知的.c或.cpp,以及.so文件一起编译成新的so。java调用上面的方法。(编译分为c和c++两种)。
  5. 环境变量:打开/etc/profile  将 export LD_LIBRARY_PATH=so的位置(pwd命令查看)。然后source /etc/profile。
  6. c:gcc -fPIC -I/usr/local/java/jdk1.8.0_131/include -I/usr/local/java/jdk1.8.0_131/include/linux -shared -o libMoniter.so normal.c
  7. c++:g++ -shared -fPIC -I/usr/local/java/jdk1.8.0_131/include -I/usr/local/java/jdk1.8.0_131/include/linux -L/usr/local/java/jdk1.8.0_131/lib -ldl -lpthread libaiui.so libmsc.so -o libMoniter.so aiui.c *.cpp
  8. 其他注意项:

    将char[] a 转化为jstring s
    将char[] a 转为 char* yuyi ----> yuyi = a;
    将char* yuyi 转化为 jstring s
    s = (*env)->NewStringUTF(env, yuyi); //c
    s = env->NewStringUTF(yuyi); //c++

    const char* login_params = (char*)(*env)->GetStringUTFChars(env, params, NULL);

原文地址:https://www.cnblogs.com/sjwang6/p/9425538.html

时间: 2024-08-11 09:53:13

java调用so文件的相关文章

JNI之Java调用so文件

一.背景:web项目中需要调用第三的一个so库文件,只能略微学习下了,对android NDK开发方面应该也有所帮助,学习下 二.调用方式 第一种方式:Java直接调用so文件 第二种方式:Java通过自己的so文件,调用第三方的so文件 三.参考示例(就不拷贝来拷贝去了,直接贴上我参考的网址吧) 参考网址: Java调用so,c编译成so    http://blog.chinaunix.net/uid-20180960-id-1972669.html Java文件 -> *.class ->

Jython:java调用python文件之第三方包路径问题

本方法解决python代码的可移植性,不需要在新机器上配置python环境,只通过安装jython的方式将python代码嵌入java工程 1. Jython如何安装 下载地址:jython_installer-2.5.0.jar.下载需要积分,如果无积分,可联系楼主. 傻瓜式下一步安装方式,路径最好和工程选在同一目录下. 2. 运行python代码 举个简单例子,安装好java环境及eclipse之后,copy如下代码即可运行.注释部分为运行文件的方式,需要新建文件后去掉注释执行. impor

java调用删除文件的方法删除文件,却删除不干净

场景: 程序中在做数据下载时,生成了一个临时文件夹.夹子里面有一些txt和其他格式文件. 数据下载完毕后,需要删除这个临时文件夹,但是一直删除不干净,总会有一下文件残留. 网搜到了这个问题的原因: 内容来自:u012102536的博客 原文地址:http://blog.csdn.net/u012102536/article/details/53583455  原因: 临时文件对象在java虚拟机(jvm)中还未被解除引用,虽然看似没有变量指向这个临时文件对象了,但还没来得急被垃圾收集器自动回收解

java 调用 库文件错误查找方法

第一步首先找到 backtrace:keyword,然后找到都应的库文件 出错的地方 pc 0000088b  /system/lib/libNDK_04.so (SayHello+98). 08-13 17:08:28.041 I/DEBUG   (  163): backtrace: 08-13 17:08:28.041 I/DEBUG   (  163):     #00  pc 00021fc0  /system/lib/libc.so (tgkill+12) 08-13 17:08:2

java调用dll文件中的类型转换

char *转String   (env)->NewStringUTF("the content you want to type in"); char *转jbyteArray jbyte *by = (jbyte*)data;int nOutSize=225*9;jbyteArray jarray = env->NewByteArray(nOutSize);env->SetByteArrayRegion(jarray, 0, nOutSize, by); retu

JAVA调用C语言写的SO文件

JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 1 // 用JNI实现 2 // 实例: 3 4 // 创建HelloWorld.java 5 class HelloWorld 6 { 7 private native void print(); 8 public static void main(String[] args) 9 { 10 new HelloWorld().p

bat文件【java调用】

Runtime.getRuntime().exec("cmd /c del c:\\a.doc");   //Runtime.getRuntime().exec("notepad");  //Runtime.getRuntime().exec("cmd /c start c:\\a.doc");  //Runtime.getRuntime().exec("cmd /c start http://www.baidu.com");

java调用process线程阻塞问题

背景 项目需求中涉及java调用.bat文件进行图像处理,先直接上简略版程序 1 public void draw(){ 2 3 //调用bat脚本进行图像处理 4 Process process = null; 5 InputStream in = null; 6 try { 7 process = Runtime.getRuntime().exec("startup.bat"); 8 9 //输出测试 10 // in = process.getInputStream(); 11

java调用dll或so动态库文件(c++/c)

java调用dll或so动态库文件(c++/c) 博客分类: 工作 CC#C++JavaEclipse java调用dll或so动态库文件(c++/c)开发平台:Eclipse3.3.1.1+CDT(cdt-master-4.0.3)+MinGW(MinGW-5.1.4) 一:下面是java调用dll(C++) 1:下载并安装cdt :http://www.eclipse.org/cdt/downloads.php  :选择自己eclipse 支持的cdt插件,下载,并且 通过eclipse--