首页/新闻资讯/正文详情

【2015-04-11】Linux下使用JNI的最简单实现

发布时间:2026/9/25 16:43:20 来源:云帆数科 栏目:资讯中心
【2015-04-11】Linux下使用JNI的最简单实现
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2015-04-11 标题Linux下使用JNI的最简单实现分类编程 / java / C C 标签linux·jni·CCLinux下使用JNI的最简单实现本地的C文件functions.hfunctions.cJni文件:JniSwapper.javaJniSwapper.h:JniSwapper.c生成so测试文件HelloJni.java:执行Java和C之间的调用可以使用JNI来实现这里笔记下一种最简单的实现流程。本地的C文件functions.h#ifndefFUNCTIONS_H_#defineFUNCTIONS_H_intadd(inta,intb);#endif/* FUNCTIONS_H_ */functions.c#includefunctions.hintadd(inta,intb){returnab;}Jni文件:JniSwapper.java备注1 作者好久没有搞java了代码都忘了怎么写了勿拍砖2 为了简单起见这里调用动态库时采用绝对路径。publicfinalclassJniSwapper{privateJniSwapper(){super();}static{try{System.load(/home/cstriker1407/workspace/HelloJni/src/libJniSwapper.so);}catch(UnsatisfiedLinkErrore){System.err.println(Cannotload library:e.toString());}}publicstaticfinalnativeintjni_add(intx,inty);}根据JniSwapper.java生成JniSwapper.h文件命令如下cstriker1407cstriker1407-x64:~/workspace/HelloJni/src$ javac JniSwapper.java cstriker1407cstriker1407-x64:~/workspace/HelloJni/src$ javah JniSwapperJniSwapper.h:/* DO NOT EDIT THIS FILE - it is machine generated */#includejni.h/* Header for class JniSwapper */#ifndef_Included_JniSwapper#define_Included_JniSwapper#ifdef__cplusplusexternC{#endif/* * Class: JniSwapper * Method: jni_add * Signature: (II)I */JNIEXPORT jint JNICALLJava_JniSwapper_jni_1add(JNIEnv*,jclass,jint,jint);#ifdef__cplusplus}#endif#endif根据JniSwapper.h文件我们可以编写JniSwapper.c文件。JniSwapper.c#includeJniSwapper.h#includefunctions.hJNIEXPORT jint JNICALLJava_JniSwapper_jni_1add(JNIEnv*env,jclass cls,jint x,jint y){returnadd(x,y);}生成so文件都搞定之后我们可以生成so命令如下gcc functions.c JniSwapper.c-fPIC-shared-I/usr/lib/jvm/java-7-openjdk-amd64/include-olibJniSwapper.so测试文件HelloJni.java:publicclassHelloJni{publicstaticvoidmain(String[]args){System.out.println(100 200 JniSwapper.jni_add(100,200));}}执行命令行下执行cstriker1407cstriker1407-x64:~/workspace/HelloJni/src$ javac HelloJni.java cstriker1407cstriker1407-x64:~/workspace/HelloJni/src$lsfunctions.c HelloJni.class JniSwapper.c JniSwapper.h libJniSwapper.so functions.h HelloJni.java JniSwapper.class JniSwapper.java cstriker1407cstriker1407-x64:~/workspace/HelloJni/src$javaHelloJni100200300

相关推荐

企业DNS解析故障排查与优化实战指南
企业DNS解析故障排查与优化实战指南

1. 问题本质不是“打不开”,而是“解析失败”——从DNS视角重新理解企业网络限制你坐在工位上,想用午休时间刷个B站新番,结果页面卡在加载图标,控制台报错“ERR_NAME_NOT_RESOLVED”;下午做竞品调研,打开抖… · 2026/9/25 16:43:20

SNOMED CT 关系型数据库落地实战:语义完整性与SQL查询优化
SNOMED CT 关系型数据库落地实战:语义完整性与SQL查询优化

简介:本资源是一套面向医疗信息学开发者与医学知识图谱工程师的SNOMED CT术语系统数据库化工具集,解决临床术语标准化数据在关系型及图数据库中快速建模、加载与查询的实际问题。包内共115个文件,涵盖64个SQL脚本(用于MySQL/Postg… · 2026/9/25 16:43:13

Edge浏览器ref A/B/C错误全解析:从成因到修复
Edge浏览器ref A/B/C错误全解析:从成因到修复

打开Edge,地址栏输了一个网址,回车之后页面没有加载出来,反而跳出一整屏错误提示:“ref A: 425de865221147298a32c55f99321287 ref B: bj1edge0719 ref C: 2026-0...”。这个画面我见过很多次,第一次遇到的人基本都会慌… · 2026/9/25 16:43:13

Windows 光标闪烁问题的解决办法:用 SetCursor 与 WM_SETCURSOR 排查并接入 TaoToken 配置
Windows 光标闪烁问题的解决办法:用 SetCursor 与 WM_SETCURSOR 排查并接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 17:19:38

Cursor Composer 多文件编辑最佳实践:TaoToken 统一 Key 配置与验证指南
Cursor Composer 多文件编辑最佳实践:TaoToken 统一 Key 配置与验证指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 17:19:38

AdminJS 的 Cypress 测试辅助模块(adminjs/cy)使用指南:为 Node.js 管理后台编写端到端测试
AdminJS 的 Cypress 测试辅助模块(adminjs/cy)使用指南:为 Node.js 管理后台编写端到端测试

后端低代码 【免费下载链接】adminjs AdminJS is an admin panel for apps written in node.js 项目地址: https://gitcode.com/gh_mirrors/ad/adminjs 点击查看 免费下载 导读 AdminJS(node.js 应用的管理后台框架)在 cy/cypress.doc.md 中… · 2026/9/25 17:19:38

ChatGPT is not all you need:一文看尽SOTA生成式AI模型——6大公司9大类别21个模型全回顾(三)TaoToken配置与验证
ChatGPT is not all you need:一文看尽SOTA生成式AI模型——6大公司9大类别21个模型全回顾(三)TaoToken配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 17:19:38

ParadeDB 基数统计(Cardinality)聚合基准查询解析:从 COUNT(DISTINCT) 到 pdb.agg 的源码级原理
ParadeDB 基数统计(Cardinality)聚合基准查询解析:从 COUNT(DISTINCT) 到 pdb.agg 的源码级原理

数据库搜索引擎全文检索向量数据库后端 【免费下载链接】paradedb One Postgres for your application data, full-text search, vector retrieval, and aggregations. Home of the pg_search extension. 项目地址: https://gitcode.com/gh_mirrors/pa/paradedb 点击… · 2026/9/25 17:19:38

【DeepSeek_论文精读】13. DeepSeek-V3.2-Exp 技术报告与部署实践:用 TaoToken 统一 Key 跑通 DSA 稀疏注意力推理
【DeepSeek_论文精读】13. DeepSeek-V3.2-Exp 技术报告与部署实践:用 TaoToken 统一 Key 跑通 DSA 稀疏注意力推理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 17:19:20

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码