之前已经试过用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库相关推荐

  1. java 调用 perl_perl - Java调用perl

    Runtime.getRuntime().exec("perl C:\\Perl\\execise.pl"); Java 调用 perl 通过IO的方式来得到返回值 package ...

  2. java调用SSIS java调用dtsx包 代码+图示

    今天,主管让研究SSIS,网上找了些资料,用VS2005,做了一个简单的资料导入功能.有了.dtsx文件 可是要怎么应用到我的java web程序呢.苦于网上资料很少,去微软的msdn上提问了,也无果 ...

  3. java 调用 su,java调用外部应用程序

    最近因为需要做视频文件转换,在网上找了下,比较多的推荐是使用ffmpeg来实现,于是准备在java语言的基础上去实现,经过分析其实就是调用ffmpeg提供的应用命令去完成. ffmpeg -i inp ...

  4. java 调用 libsvm_libsvm java 调用说明

    libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.9 libsvm命名空间下主要使用类: svm_model 为模型类,通过训练或加载训练好的模型文 ...

  5. java dll 调用方法_关于Java调用dll的方法 | 学步园

    Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C   写好的DLL库时,由于基本数据类型不同.使用字节 ...

  6. 【Java】使用Java调用Python的四种方法

    写在前面 为啥一个好好的岗位是Java开发工程师要去做写python呢?因为产品经理安排的(突然多少有点明白为啥程序员和产品经理会一直开撕).由于在选择企业的时候没看清企业性质,看了要求以为就是互联网 ...

  7. Java调用Javascript、Python算法总结

    最近项目中经常需要将Javascript或者Python中的算法发布为服务,而发布Tomcat服务则需要在Java中调用这些算法,因此就不免要进行跨语言调用,即在Java程序中调用这些算法. 不管是调 ...

  8. Java调用Oracle存储Package

    Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws j ...

  9. Java调用python项目实战

    项目中有用到Java调用python的需求,经过各种坑之后,根据业务需求,最终实现Java调用Python的各种情况,现在将总结如下,当然调用的也是Jython,具体原因,下面会介绍,先将代码贴出来. ...

  10. java调用c so动态库_jni 调用C动态库dll/so

    http://hi.baidu.com/fengying765/blog/item/7081113e5fde53e555e7233f.html 作为主调方的Java源程序TestJNI.java如下. ...

最新文章

  1. CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版
  2. IntelliJ IDEA部署javaweb项目
  3. linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法
  4. 计算机专业需要汇编语言,重点大学计算机专业系列教材·汇编语言程序设计
  5. linux dd使用记录
  6. ie浏览器网页版进入_Win10系统中IE和edge浏览器无法打开网页如何解决
  7. 7-1-JavaBean基础
  8. Collection源码分析(二):LinkedList源码分析
  9. 第2章 python入门
  10. kruskal java_kruskal算法 源码(java)
  11. MyBatis Review——多对多映射
  12. 我在使用Spring Gateway时遇到的一些坑
  13. Notepad3(高级文本编辑器)v5.19.815.2595版本更新啦
  14. RGB888与RGB565
  15. 华为云主机被植入挖矿,主机变肉鸡破解实录。
  16. 女版乔布斯的覆灭,这是今年我听过最唏嘘的真人故事
  17. 计算机第三课细心小编辑教案,教案-第6课小小编辑师
  18. 把撒哈拉沙漠变成一个太阳能农场,这可能吗?
  19. 体系结构实验(2)—— 不同指令集的对比
  20. Android版本9华为,华为应用市场旧版本下载-华为应用市场老版v9.0.0.303 安卓版 - 极光下载站...

热门文章

  1. 清华大学计算机系赵桥,赵桥
  2. Java最新学习笔记(2020版)丨基于JKD1.8
  3. 自从看了<<麦肯锡的领导力法则>>之后......
  4. 关于坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解
  5. 使用Inno Setup 制作软件安装包详细教程(与开发语言无关)
  6. 图像压缩之DCT变换
  7. 从多种模型中选择最合适的模型,用于行人检测
  8. 拼多多电商外部工具(浏览器插件)
  9. 微信生态圈的发展分析
  10. html页脚的话,HTML页脚footer标记