- 浏览: 1482105 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
遇到java调用共享内存的问题,
java似乎没找到调用共享内存的的api
如果是调用“内存”,去看http://haoningabc.iteye.com/blog/1329079
只能用webservce或jni的方式去java调用c了
为了不把性能消耗在在网络传输上,让webservice先滚蛋
用jna吧,c调用共享内存的就不说了,《linux网络编程第二卷》很详细
jni不好用,还是jna简单
如果在windows下
如果在linux下
顺便把c复习一下,准备做一个testadd的动态库,先测一下动态库是否好使,
先写3个文件test.h test.c testadd.c
test.h
test.c
testadd.c
生成libtestadd.so
测试一下是否好使
yeh,"this is add"是libtestadd.so打印的,
现在用jna调用libtestadd.so
把jna.jar放到这个目录下
编写TestAddService.java
完了,java定义一个c接口就完了
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
测试一下是否好使
[root@redhat5 c]# gcc -fpic -shared -o libtestadd.so testadd.c [root@redhat5 c]# gcc -o test test.c -I. -L. -ltestadd [root@redhat5 c]# ./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 [root@redhat5 c]#
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"); } }
[root@redhat5 c]# javac -cp .:jna.jar TestAddService.java [root@redhat5 c]# 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
完了,java定义一个c接口就完了
发表评论
-
xl2tp 备份
2019-09-24 16:25 7292019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 740sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1439参考https://bellard.org/jslinux/t ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 19012019年12月26日 可以参考原来的配置 https:// ... -
consul的基本使用
2017-06-27 11:13 1409### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 600###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 657《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1962参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 961/etc/hosts ssh-keygen ssh-copy- ... -
mobile terminal 笔记
2016-12-02 15:35 646找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
tomcat的https的例子
2016-09-22 17:50 463参考http://jingyan.baidu.com/arti ... -
socket基础和select(python)
2016-06-14 17:21 1807上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 1005不使用select 普通的基础socket连接,对多个客户端的 ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4382假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 661564位操作系统centos7 ############ 1.一 ... -
socat和netcat(nc)
2016-04-29 22:36 1756转 原文链接: http://www.wenquan.name ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1630接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1549qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ... -
neutron基础七(qemu tap)
2016-02-02 17:02 1033使用qemu 建立个虚拟机 然后用tap设备, 根据基础六,t ... -
neutron基础六(bridge fdb)
2016-01-28 18:30 2276转发表 在三台机器上建立三个namespace 192.16 ...
相关推荐
以下是一个简单的JNA使用示例: ```java import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; /** * Simple example of JNA interface mapping and usage. */ public class ...
该资源中,包含jna.jar 和一个jna的函数文档。并且有一个完整的使用例子。该例子是访问本地的IC卡读卡器,其中因为原始厂商提供的本地代码函数过于发杂,为了便于JNA调用,又对本地代码...这是一个很好的JNA使用范例。
JNA 使用方法 JNA(Java Native Access)是一种可以让 Java 程序直接调用本地方法的框架,不需要额外的处理或配置,也不需要多余的引用或编码。JNA 框架是 SUN 公司主导开发的,建立在经典的 JNI(Java Native ...
内部包含6个文件,其中五个是最新JNA jar包,包括jna-platform-4.1.0.jar、jna-platform-4.2.0.jar、jna-platform-4.2.1.jar、jna-platform-4.2.2.jar,一个是JNA介绍文档,包括在线帮助、入门示例、简单程序示例等...
JNA使用一个配置文件(通常名为`native.lib`),该文件定义了本地库的函数和数据类型。 2. **安装JNA**:要使用JNA,首先需要将其添加为项目的依赖。如果你使用的是Maven,可以在`pom.xml`文件中添加JNA的依赖项。...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的本地库函数,而无需编写任何C/C++代码或使用JNI(Java Native Interface)。本实例将详细介绍如何使用JNA调用DLL动态链接...
"jna-demo.zip_DEMO_JNA demo_java jna_jna的demo_vertical6t2"是一个包含JNA使用示例的压缩包,主要用于演示如何在Java程序中调用DLL(动态链接库)文件。 在Java中,由于其跨平台性,通常不直接操作底层系统资源...
二、JNA使用步骤 1. 定义接口:首先,创建一个Java接口,声明需要调用的本地函数。 ```java public interface User32 extends Library { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class)...
- 缓存机制:JNA使用内存映射文件和缓存来提高性能,避免重复加载库和解析函数。 - Pointer与Memory管理:理解Pointer和Memory对象的生命周期,可以有效避免资源泄漏。 7. 实战应用 - 文件操作:利用JNA ...
它包含"3个jna使用demo",这些示例代码可以帮助开发者理解JNA的工作原理和使用方法。"有很好的注释内有so/dll文件"表明代码中包含详尽的注释,方便学习,同时包含Linux下的动态链接库文件(.so)和Windows下的动态...
- JNA使用一个类型映射系统,将Java类型自动转换为本地类型的等效物。 - 它的内存管理也是自动的,调用完成后,JNA会清理调用过程中的所有内存。 **3. 使用场景:** - 访问操作系统API,如文件系统操作、进程管理、...
因为JNA使用了Java反射,这比直接的JNI调用要慢。然而,对于那些不关心微小性能差异,而更重视开发效率和可维护性的项目,JNA是一个很好的选择。 总的来说,JNA是Java程序员与本地代码交互的有力工具,尤其在...
1. **JNA库的集成**:项目可能包含如何将JNA库添加到Android项目的构建文件(如build.gradle)中,以便在应用中使用JNA。 2. **示例代码**:可能有Java类展示了如何使用JNA接口来调用Android或Linux系统的函数,...
JNA使用一个JSON配置文件(通常为`platform.jar`中的`NativeLibrary.map`)来定义这些映射关系,然后通过Java反射机制动态地加载和调用本地库。 **使用JNA调用DLL:** 1. **导入JNA库**:首先,你需要在项目中引入`...
JNA使用一个小型本地库存根来动态调用本地代码.开发者需要定义一个JAVA接口来描述本地库存的函数,结构. JNA包括一个平台库. 它提供已描述好本地函数类型的一组工具接口来简化本地访问. JNA与JNI比较, 它不需要生成...
使用JNA,你可以执行以下操作: 1. 调用操作系统API:比如获取系统信息、文件操作、网络通信等。 2. 与本地库交互:例如,使用OpenCV、OpenGL或其他C/C++库。 3. 操作硬件设备:如读写硬件寄存器或控制GPIO引脚。 4....
jna 实现回调函数 code.zip jna 实现回调函数 code.zip jna 实现回调函数 code.zip jna 实现回调函数 code.zip jna 实现回调函数 code.zip jna 实现回调函数 code.zip jna 实现回调函数 code.zip
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写任何C/C++代码或使用JNI(Java Native Interface)。JNA通过提供一种映射机制,将Java方法与本地库...
JNA通过映射Java方法到本地函数,实现了Java与操作系统底层功能的交互,极大地简化了在Java应用中使用系统API或DLL库的过程。在这个场景中,我们有两个文件:`jna-3.3.0.jar`和`jna-3.3.0-platform.jar`,它们分别是...