jna的使用

遇到java调用共享内存的问题,
java似乎没找到调用共享内存的的api
如果是调用“内存”,去看http://haoningabc.iteye.com/blog/1329079
只能用webservce或jni的方式去java调用c了
为了不把性能消耗在在网络传输上,让webservice先滚蛋
用jna吧,c调用共享内存的就不说了,《linux网络编程第二卷》很详细

jni不好用,还是jna简单
如果在windows下
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class HelloWorld {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
void printf(String format, Object... args);
}
public static void main(String[] args) {
CLibrary.INSTANCE.printf("in windows\n");
for (int i = 0; i < args.length; i++) {
CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
}
}
}

如果在linux下
顺便把c复习一下,准备做一个testadd的动态库,先测一下动态库是否好使,
先写3个文件test.h test.c testadd.c
test.h
#include <stdio.h>
void add();

test.c
#include <stdio.h>
#include "test.h"
int main()
{
printf("haha\n");
add();
}

testadd.c

#include <stdio.h>
#include <unistd.h>
void add()
{
char name[65];
printf("this is add \n");
gethostname(name, sizeof(name));
printf("hostname=%s\n",name);
system("ls");
}


生成libtestadd.so
测试一下是否好使
[code="java"]# gcc -fpic -shared -o libtestadd.so testadd.c
# gcc -o test test.c -I. -L. -ltestadd
# ./test
(有写系统可能会报错,比如fedora16,如果报./test: error while loading shared libraries: libtestadd.so: cannot open shared object file: No such file or directory,需要设置一下 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:当前跑程序的目录就可以了)
haha
this is add
hostname=122226
a.out libtestadd.so TestAddService.class test.h
biji.txt main.c TestAddService.java y.tab.c
JNA.chm test TestAddService$TestAdd.class
jna.jar testadd.c test.c
# [/code]
yeh,"this is add"是libtestadd.so打印的,
现在用jna调用libtestadd.so
把jna.jar放到这个目录下
编写TestAddService.java
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestAddService {
public TestAddService() {
}
public interface TestAdd extends Library {
TestAdd INSTANCE = (TestAdd) Native.loadLibrary("testadd",TestAdd.class);
public void add();
}
public static void main(String[] args) {
TestAdd.INSTANCE.add();
System.out.println("哦 yeh yeh jna in linux");
}
}

[code="java"]# javac -cp .:jna.jar TestAddService.java
# java -cp .:jna.jar TestAddService
this is add
hostname=122226
a.out libtestadd.so TestAddService.class test.h
biji.txt main.c TestAddService.java y.tab.c
JNA.chm test TestAddService$TestAdd.class
jna.jar testadd.c test.c
哦 yeh yeh jna in linux
[/code]
完了,java定义一个c接口就完了
JNA和JNA_API参考手册CHM jna.jar和中文JNA3[1].09API参考手册.chm 立即下载

相关推荐

JNA3.09API参考手册.chm

JNA3.09API参考手册.chm 是我制作的JNA类库3.09版的Java API参考手册。方便查找。 JNA是最新的Java平台上调用动态链接库.dll/.so的类库。是JNI终结者。

JNA—JNI终结者

                     JNA—JNI终结者 介绍给大家介绍一个最新的访问本机代码的Java框架—JNA。JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架。JNA项目地址:https://jna.dev.java.net/ 非常强大、易用,功能上类似与

【良少课堂】 11万+

菲涅尔波带片

菲涅尔波带片的简介,以及matlab绘制

Bestchinese的博客 1万+

JNA (Java 本地访问)理论概述与入门

目录 JNA (Java 本地访问)概述 C 语言 与 Java JNA 入门示例 msvcrt.dll 运行库 printf 打印方法 kernel32 动态链接库 GetLogicalDriveStringsA GetSystemDirectoryA 本文参考网址:https://blog.youkuaiyun.com/gwd1154978352/article/details/5509...

蚩尤后裔-汪茂雄 6614

一文解释电路中常用电子元器件应用和选型01

电容和二极管是电路中最常用的两个电子元器件,种类和系列众多,这里简单总结一下应用场景和选型方式 电容(Capacitor) 电容的种类(20种以上)和应用非常广泛,但是我经常遇到的无非就是下面这几种: 应用 1.隔直流。 2.旁路(去耦) 3.耦合 4.滤波 5.温度补偿 6.计时 7.调谐 8.整流 9.储能 种类 1. 陶瓷电容 2. 云母电容 3. 铝电解电容 4. 钽

weixin_43904073的博客 2236

FEniCS学习笔记01:centos7下通过conda安装FEniCSx0.7

2023年版本的Fenicsx0.7,官网推荐使用conda命令安装集成好的Python包,因此我们的安装思路是先安装Anaconda,再按照官网步骤安装Fenics。

huahua_xiao的博客 5056

Java通过JNA调用so文件,实现对硬件的操作

由于工作需要,最近被安排对公司新入手的设备进行性能测试,硬件厂商了提供了测试的C语言代码、硬件驱动和调用驱动所用的so文件。由于大学期间学了java后,打算不再使用C,导致对C的知识全部送还给老师了。而且大学期间从未接触过Linux,导致对C在linux运行完全不通。 经百度发现java可以使用JNI或者JNA调用C代码实现对硬件的调用。刚开始研究JNI发现需要编译C语言封装一下原接口才可以使用。因为完全忘记,果断放弃。然后发现除了JNI还有个叫JNA的相对于Java程序员更加方便。开始着手研究使用JNA

xuemoKingDeath的博客 1182

利用CubeMX复现正点原子TFTLCD驱动例程

①准备delay.c、delay.h、sys.c和sys.h四个文件。FMC的工作原理暂时先欠着,先记录一下CRUD的过程。这里我们使用的是BANK1 的第一个分区。点击 Configuration->FMC。②把fmc自动生成的代码注释掉一部分。配置参数如下图 17.5.1。③这个printf语句要屏蔽掉。选项卡之下配置相关参数。④整体代码,按需裁剪。

qq_59757948的博客 1612

Java与VC/C/C++共享内存

解决方案 1. 采用socket的方式:调用共享内存 你得用VC写个DLL,JAVA调用。 2. SOCKET是最好的选择。共享内存好像也是SOCKET实现的。 用VC写DLL然后调用。分布式最终也是用的SOCKET。缓存等等 10年我弄过 进程间通信;进程间通信 VC有一种就是SOCKET;SOCKET 本地 不走局域网的;JAVA和VC。 用缓存啊,就是中间层 java中没有专门

北京Java青年 5626

使用JAVA代码转word文档之动态生成数据填充(图文详解)

今天跟公司对接了业务,根据业务需求,乙方需求文档是word格式的,而我们的数据是动态数据,每生成一份数据,就要以word的形式给乙方一份邮件!这就给了我们的工作一定的难度和挑战! 通过阅读资料,团队的帮助以及自我测试,终于实现了这个功能!因为在搜索资料方面,发现各位博主讲的比较模糊,自己碰到了很多bug,浪费了很多宝贵的时间,所以今天写了这篇文章,希望对自己以后或者他人有所帮助! 操作第一步:先准...

huaiyan 7719

STM32F103C8T6全桥逆变电路PWM波生成(基于HAL库)

全桥逆变电路需要两组开关管相互协同工作,故需要两路PWM控制信号,为了防止电源短路,需要保证同一桥臂的上下两个开关管不会同时导通,故两路PWM在相位上需要相差180°;为了保证高频变压器不会磁饱和,使正负半周PWM占空比相同。但是传统的互补输出达不到调节占空比调节输出电压的效果。......

weixin_45042735的博客 6022

JNA的使用

JNA全称Java Native Access,是一个建立在经典的JNI技术之上的Java开源框架(https://github.com/twall/jna)。JNA提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。

东天里的冬天 6万+

Xilinx FPGA平台GTX简易使用教程(四)GTX IP核配置教程

干货来了,GTX IP核配置,搬砖全靠它~~

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

Android Studio里使用JNA

教程二 在Android Studio里使用JNA环境 Android Studio 1.5.1 已经下载内置ndk 具体操作 准备JNA开发环境这个部分是最重要的,也是与JNI的例子主要不同之处之一 十分感谢这篇文章,之前查找了好多博客,也做了很多尝试,终于这个里面的jna.jar是有效的。这个虽然不是官方的jna开源位置,但是是为android单独配置的 下载或者clone源代码 运行命令ant

sadcup的专栏 5046

分布式协作方案:OpenClaw多节点部署与设备互联

主从架构或对等架构服务发现与注册机制负载均衡策略选择分布式任务队列优先级调度失败重试机制WebSocket实时通信数据同步引擎冲突解决策略健康检查机制故障自动转移数据复制与恢复通过分布式部署,OpenClaw可以支撑更大规模的业务场景,提供更稳定可靠的AI助手服务。在下一篇文章中,我们将深入探讨安全与权限管理的精细化策略。

gaoxiang_120的专栏 370

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android下使用JNA

jna在windows和linux下使用都很简单只要导入jna.jar就可以,maven中如下引入就可以了 <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.5.0</version> </dependency> 但是在android下要使用jna可就没这么简

10km的专栏 6049

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JNA使用

介绍 给大家介绍一个最新的访问本机代码的 Java 框架 —JNA 。 JNA(Java Native Access) 框架是一个开源的 Java 框架,是 SUN 公司主导开发的,建立在经典的 JNI 的基础之上的一个框架。 JNA 项目地址: https://jna.dev.java.net/ 非常强大、易用,功能上类似与 .NET 的 P/Invoke 。 不堪...

bangxuzhong6421的博客 365

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jna jar包_开源框架JNA的使用

Java开发过程中,有时候会需要和C,C++等交互,这时候我们就想起了经典技术JNI,但是JNI的使用过程十分繁琐,而且容易出现各种问题,还得封装而且问题不好定位。假如我们有一个.so文件,如果使用JNI去调用,我们需要另外用C语音写一个.so的共享文件,并且得使用SUN规定的数据结构去替代C语言的数据结构,至此才能调用so文件里面公布的函数。作为JAVA的程序员这个过程是令人头疼的。相...

weixin_39598501的博客 3773

java jna 数据结构_开源框架JNA的使用

Java开发过程中,有时候会需要和C,C++等交互,这时候我们就想起了经典技术JNI,但是JNI的使用过程十分繁琐,而且容易出现各种问题,还得封装而且问题不好定位。假如我们有一个.so文件,如果使用JNI去调用,我们需要另外用C语音写一个.so的共享文件,并且得使用SUN规定的数据结构去替代C语言的数据结构,至此才能调用so文件里面公布的函数。作为JAVA的程序员这个过程是令人头疼的。相比之下,使...

weixin_36486007的博客 776

JNA 的使用

JNA使用 介绍 给大家介绍一个最新的访问本机代码的 Java 框架 —JNA 。 JNA(Java Native Access) 框架是一个开源的 Java 框架,是 SUN 公司主导开发的,建立在经典的 JNI 的基础之上的一个框架。 JNA 项目地址: https://jna.dev.java.net/   非常强大、易用,功能上类似与 .NET 的 P/Invok

cc627968937的专栏 647

jna 使用_使用JNA的透明JFrame

jna 使用 在使JFrame透明中,我展示了一种使用AWTUtilities类使框架透明的方法。 但是使用该类会导致访问限制编译时错误,该文章中还显示了Eclipse中的解析。 现在,这里是使用Java本机的版本。 我使用Java本机访问(JNA)库来调用本机函数来完成任务。 什么是Java本机访问(JNA) ? JNA使Java程序可以轻松访问本机共享库(Windows上的DLL),...

最佳 Java 编程 221

java使用动态库之JNA

前言 个人拙见:java也不是万能的,对于一些底层的处理或者使用已经写好的C的代码,java就要寄出两大法宝:JNI和JNA。JNI和JNA其实很相似,但是如果对速度要求不高的情况下,我个人选择使用起来较为容易的JNA。 JNA可以直接调用C/C++编写的DLL文件 这个就是我们为什么要使用JNA的原因了。 准备工作 下载导入两个jar https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna/4.0.0/jna-4.

LyRics1996的博客 1321

【深夜记坑】在android中使用JNA

JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。 优点 JNA可以让

爱去玩的专栏 3161

JNA使用总结

这两天工作有一项任务,需要用 java 去调用 c 语言编写的 SDK,用到了 JNA,用的过程中遇到了些问题,在这里总结下使用方法,记录下。 分为几个步骤:编写一个继承了 Library 的接口,在类中声明接口,编写结构体(如果有需要),调用接口。 1. 编写 Library 接口   在接口中声明的方法要和 SDK 的函数对应上,方法名要对应函数名。   参数的话,基本类型一样,指针对...

weixin_30418341的博客 297
上一篇: fedora之ssh配置
下一篇: (转载)gcc中include文件的搜索路径
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值