跨平台调用之一——java调用so库
之前已经试过用c调用.a库,也有总结在工作文档中,下面在家试试用java利用jni(jna应该更方便)调用.so库(其实很相似,不过之前是Linux,这里是win)
建立项目:
1.编写源文件:
package com.demo.TestLib.JniSo;public class Hello{static{System.load("/lib/libHello.so");}public native void say();public native String world(String str);public static void main(String...args){Hello hello = new Hello();hello.say();System.out.println("java : "+hello.world("hello"));}
}
2.编译Hello.java - Hello.class
解决办法:将系统变量中的path路径,也复制到用户变量的Path路径中,(为什么呢?)
3.编译Hello.class 生成 com_jni_Hello.h 的头文件
资料中说:用
但是jdk9之后(大概)javah不可用了,应:
生产了一个头文件:
4.编写c++/c的业务代码,引用com_jni_Hello.h 的头文件,并实现定义的方法
#include "com_demo_TestLib_JniSo_Hello.h"
#include "string.h"
JNIEXPORT void JNICALL Java_com_demo_TestLib_JniSo_Hello_say(JNIEnv *env, jobject object){printf("hello world!");}JNIEXPORT jstring JNICALL Java_com_demo_TestLib_JniSo_Hello_world(JNIEnv *env, jobject obejct, jstring string){const char *wd = " world!!";const char *getstr = (*env)->GetStringUTFChars(env,string, 0);char *str;str=strcpy(str,wd);str=strcpy(str,getstr); jstring out= (*env)->NewStringUTF(env,str);return out;}
以下待完成:
5.编译c/c++ 代码生成动态链接库 .so文件
gcc -fPIC -D_REENTRANT C:\java\jdk-13\include\win32 -c Hello.c
6:把so的路劲添加到LD_LIBRARY_PATH变量
export LD_LIBRARY_PATH=/home/admin/lib
7: 运行java程序
java com.jni.Hello8:结果java : hello
hello world!
————————————————
版权声明:本文为CSDN博主「ailice001」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ailice001/article/details/79880876
另:
1.so为linux下的产物,所以我用windows没有道理。。。。再讨论吧
so库文件使用
2.java调用dll倒是需要学习
java调用dll库
3.java利用jna调用.so库
添加链接描述
跨平台调用之一——java调用so库相关推荐
- java 调用 perl_perl - Java调用perl
Runtime.getRuntime().exec("perl C:\\Perl\\execise.pl"); Java 调用 perl 通过IO的方式来得到返回值 package ...
- java调用SSIS java调用dtsx包 代码+图示
今天,主管让研究SSIS,网上找了些资料,用VS2005,做了一个简单的资料导入功能.有了.dtsx文件 可是要怎么应用到我的java web程序呢.苦于网上资料很少,去微软的msdn上提问了,也无果 ...
- java 调用 su,java调用外部应用程序
最近因为需要做视频文件转换,在网上找了下,比较多的推荐是使用ffmpeg来实现,于是准备在java语言的基础上去实现,经过分析其实就是调用ffmpeg提供的应用命令去完成. ffmpeg -i inp ...
- java 调用 libsvm_libsvm java 调用说明
libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.9 libsvm命名空间下主要使用类: svm_model 为模型类,通过训练或加载训练好的模型文 ...
- java dll 调用方法_关于Java调用dll的方法 | 学步园
Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C 写好的DLL库时,由于基本数据类型不同.使用字节 ...
- 【Java】使用Java调用Python的四种方法
写在前面 为啥一个好好的岗位是Java开发工程师要去做写python呢?因为产品经理安排的(突然多少有点明白为啥程序员和产品经理会一直开撕).由于在选择企业的时候没看清企业性质,看了要求以为就是互联网 ...
- Java调用Javascript、Python算法总结
最近项目中经常需要将Javascript或者Python中的算法发布为服务,而发布Tomcat服务则需要在Java中调用这些算法,因此就不免要进行跨语言调用,即在Java程序中调用这些算法. 不管是调 ...
- Java调用Oracle存储Package
Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws j ...
- Java调用python项目实战
项目中有用到Java调用python的需求,经过各种坑之后,根据业务需求,最终实现Java调用Python的各种情况,现在将总结如下,当然调用的也是Jython,具体原因,下面会介绍,先将代码贴出来. ...
- java调用c so动态库_jni 调用C动态库dll/so
http://hi.baidu.com/fengying765/blog/item/7081113e5fde53e555e7233f.html 作为主调方的Java源程序TestJNI.java如下. ...
最新文章
- CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版
- IntelliJ IDEA部署javaweb项目
- linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法
- 计算机专业需要汇编语言,重点大学计算机专业系列教材·汇编语言程序设计
- linux dd使用记录
- ie浏览器网页版进入_Win10系统中IE和edge浏览器无法打开网页如何解决
- 7-1-JavaBean基础
- Collection源码分析(二):LinkedList源码分析
- 第2章 python入门
- kruskal java_kruskal算法 源码(java)
- MyBatis Review——多对多映射
- 我在使用Spring Gateway时遇到的一些坑
- Notepad3(高级文本编辑器)v5.19.815.2595版本更新啦
- RGB888与RGB565
- 华为云主机被植入挖矿,主机变肉鸡破解实录。
- 女版乔布斯的覆灭,这是今年我听过最唏嘘的真人故事
- 计算机第三课细心小编辑教案,教案-第6课小小编辑师
- 把撒哈拉沙漠变成一个太阳能农场,这可能吗?
- 体系结构实验(2)—— 不同指令集的对比
- Android版本9华为,华为应用市场旧版本下载-华为应用市场老版v9.0.0.303 安卓版 - 极光下载站...
热门文章
- 清华大学计算机系赵桥,赵桥
- Java最新学习笔记(2020版)丨基于JKD1.8
- 自从看了<<麦肯锡的领导力法则>>之后......
- 关于坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解
- 使用Inno Setup 制作软件安装包详细教程(与开发语言无关)
- 图像压缩之DCT变换
- 从多种模型中选择最合适的模型,用于行人检测
- 拼多多电商外部工具(浏览器插件)
- 微信生态圈的发展分析
- html页脚的话,HTML页脚footer标记