`
lizhensan
  • 浏览: 384561 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dll库的制作及Java jni的调用

    博客分类:
  • java
 
阅读更多

Java代码

package cn.com.comit.jni;
 
public class HelloJni {
     
    public native void displayHelloJni();
    static{
        System.loadLibrary("hello");
    }
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new HelloJni().displayHelloJni();
    }
 
}

编译class后

 

javah cn.com.comit.jni.HelloJni  生成对应的c的头文件

cn_com_comit_jni_HelloJni.h

 

编写C程序的实现

 

#include <jni.h>
#include <stdio.h>
#include  "cn_com_comit_jni_HelloJni.h"

JNIEXPORT void JNICALL Java_cn_com_comit_jni_HelloJni_displayHelloJni
  (JNIEnv *, jobject)
{
printf("Hello Jni .....\n");
return ;
}

 

cl -I %java_home%\include -I %java_home%\include\win32 -LD Hello.cpp -Fehello.dll

生成动态库,jni.h该头文件在java_home中,所以要包含过来进行编译

cl类似于linux中的gcc

 

运行Java代码测试

Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path

 

hello.dll必须是在JVM属性java.library.path所指向的路径中

 

 1、-Djava.library.path=./c 或动态的形式

 

 2、System.setProperty("java.library.path", System.getProperty("java.library.path") + ";./c");

 

 

两种方式的区别:

如果想在程序中加载一些库文件,使用第一种方式指定java.library.path属性时可以正常载入,而使用第二中方式就不行。java.library.path只有在JVM启动的时候读取一次,因此在java代码中更改java.library.path是不起任何作用的。我们还可以在代码中使用System.load("/jni/library/absolute/path")来加载绝对地址指定的本地库。

 

如果用代码的形式设置必须如下:

 System.setProperty("java.library.path", System.getProperty("java.library.path") + ";./c");

 Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");

 fieldSysPath.setAccessible(true);

 fieldSysPath.set(null, null);//设置为null,这样它就会重新去取最新的值

 

 

分享到:
评论
1 楼 hw1287789687 2014-03-20  
指定java.library.path 的方式:
方式一:
在eclipse运行配置中,VM arguments 中增加:
-Djava.library.path=d:\bin\javalibrary

方式二:
在命令行中运行:
正确:java -Djava.library.path=d:\bin\javalibrary  com.test.jniserver.test
错误:java com.test.jniserver.test -Djava.library.path=d:\bin\javalibrary

注意:java.library.path 可以使用相对路径:
java -Djava.library.path=..\..\..\..\bin\javalibrary  com.test.jniserver.test

相关推荐

    宇宙人.zip

    宇宙人.zip

    基于CarSim和Simulink的ACC自适应巡航控制系统联合仿真的研究与应用

    内容概要:本文介绍了基于CarSim和Simulink的ACC自适应巡航控制联合仿真模型。该模型由两部分组成:上层控制器采用ACC策略,负责根据车辆周围环境调整车速和跟车距离;下层控制器采用PID控制,确保车辆准确跟随上层指令。此外,还包含车辆逆动力学模型,用于模拟真实车辆的动态响应。文中详细解释了cpar文件的作用及其参数设置方法,并展示了如何在Simulink中搭建PID控制器。通过仿真,验证了模型在复杂道路环境下的有效性,展示了车辆能够根据前方车辆的速度和距离自动调整车速和跟车距离,保持安全行驶。 适合人群:从事自动驾驶技术研发的工程师和技术研究人员。 使用场景及目标:适用于需要对ACC系统进行深入研究和测试的场景,旨在帮助研发人员更好地理解和优化ACC策略,提高自动驾驶的安全性和可靠性。 其他说明:该模型为自动驾驶技术的研发提供了有效工具,有助于推动相关技术的进步和发展。

    异业联盟红包拓客 2.12.2.zip

    异业联盟红包拓客 2.12.2.zip

    Simulink锂离子电池模型:设定功率充放电与实时监测的电池管理工具

    内容概要:本文详细介绍了Simulink锂离子电池模型的功能和技术解析。该模型主要用于模拟锂离子电池的充电和放电过程,能够设定功率进行充放电并实时监测电池的电压、电流、温度和SOC。它提供了数据输入与设置、实时监测与数据分析等功能,确保了模型的准确性和可靠性。通过该模型,工程师可以深入了解电池的性能特点,预测其在实际使用中的表现,从而为产品研发和优化提供依据。 适合人群:从事电动汽车、可再生能源以及储能系统研究和开发的工程师和技术人员。 使用场景及目标:①电动汽车研发:模拟电池性能,提升车辆性能和稳定性;②可再生能源领域:分析电池特性,促进能源开发和利用;③储能系统仿真:优化储能系统设计,提高电力系统效率。 其他说明:该模型不仅适用于特定领域的研究,还可扩展到其他需要模拟和分析电池性能特点的领域。

    实训商业源码-飞飞CMS最新版本DC04电脑端网站模板-毕业设计.zip

    实训商业源码-飞飞CMS最新版本DC04电脑端网站模板-毕业设计.zip

    新能源电动汽车VCU与BMS硬件在环仿真:多模块整合的整车建模与HIL系统实现

    内容概要:本文详细介绍了新能源电动汽车中VCU(车辆控制单元)和BMS(电池管理系统)的硬件在环(HIL)仿真技术及其重要性。文中阐述了VCU和BMS在电动汽车中的角色,解释了硬件在环仿真技术的概念及其在电动汽车研发中的应用。重点讨论了电动汽车整车建模的方法,涵盖驾驶员模块、仪表模块、BCU整车控制器模块、MCU电机模块、TCU变速箱模块、减速器模块、BMS电池管理模块等多个子系统的建模。此外,文章还探讨了HIL仿真的具体应用场景和优势,强调其在降低成本、提高效率和安全性方面的作用。 适合人群:从事新能源汽车研发的技术人员、研究人员及相关领域的学生。 使用场景及目标:适用于希望深入了解电动汽车VCU和BMS硬件在环仿真技术的研究人员和技术人员,旨在帮助他们掌握相关技术和工具,提升电动汽车的研发和测试能力。 其他说明:文章提供了详细的模块介绍和仿真技术的应用案例,有助于读者更好地理解和应用HIL仿真技术于实际项目中。

    实训商业源码-手动安装视频教程-毕业设计.zip

    实训商业源码-手动安装视频教程-毕业设计.zip

    电力电子领域中两相交错并联Boost变换器的模型预测控制及Matlab Simulink仿真

    内容概要:本文探讨了模型预测控制(MPC)在两相交错并联Boost变换器中的应用,特别是在Matlab/Simulink环境下对其快速响应、均流特性的仿真研究。文中介绍了MPC的基本概念,强调了它在应对电压跳变和负载突变时的优势。同时,还比较了纯MPC与PI+MPC两种控制方法的效果,指出后者在稳态误差和响应速度方面表现更优。 适合人群:从事电力电子、自动化控制领域的研究人员和技术工程师。 使用场景及目标:适用于需要深入了解MPC理论及其在具体硬件平台上的实施细节的人群;旨在提升电力转换设备的效率和可靠性。 其他说明:文章提供了详细的实验数据和图表支持,有助于读者直观理解不同控制策略下系统的动态行为。此外,文中提及的所有仿真均是在Matlab/Simulink平台上完成的,这为后续的实际工程应用打下了坚实的基础。

    实训商业源码-炫酷恶趣强大的制作神器小程序源码_支持多种流量主模式-毕业设计.zip

    实训商业源码-炫酷恶趣强大的制作神器小程序源码_支持多种流量主模式-毕业设计.zip

    DSP28335芯片基于Bootloader与CAN通信的在线固件升级解决方案

    内容概要:本文详细介绍了DSP28335芯片通过Bootloader和CAN通信实现在线固件升级的方法。首先解释了Bootloader的工作原理,即芯片上电后运行固化在Flash中的Bootloader程序,通过CAN接收新固件数据,擦除旧程序并写入新程序,最后跳转到用户程序执行。文中提供了具体的CAN初始化代码(如设置CCR配置位)以及上位机Python代码用于发送固件数据。还特别提到了版本校验的重要性,并给出了一种优化后的CRC32校验算法。此外,文档中提到一些常见问题及其解决方案,如CAN设备丢包问题和硬件干扰问题。 适合人群:嵌入式系统开发者、DSP芯片使用者、固件开发工程师。 使用场景及目标:适用于需要对DSP28335或其他类似DSP芯片进行固件升级的场景,帮助用户掌握Bootloader的应用和CAN通信的具体实现方法,确保固件升级的成功率。 其他说明:文档不仅提供理论讲解,还有详细的代码示例和操作步骤,甚至包括了一些实际操作中遇到的问题及解决方案,非常适合初学者和有一定经验的研发人员学习和参考。

    实训商业源码-电影门户苹果CMS主题模板下载-毕业设计.zip

    实训商业源码-电影门户苹果CMS主题模板下载-毕业设计.zip

    基于骨骼三维信息结合隐马尔科夫模型人体动作识别方法.pdf

    基于骨骼三维信息结合隐马尔科夫模型人体动作识别方法.pdf

    锂电池SOC与BMS:基于2-RC模型的MATLAB Simulink仿真及PCB电路设计

    内容概要:本文详细探讨了锂电池的SOC(荷电状态)与BMS(电池管理系统)的关系,重点介绍了2-RC模型及其在BMS中的应用。文中通过MATLAB Simulink进行仿真,展示了如何测试和验证SOC估算算法的精度,并讨论了提高算法精度的方法和技术。此外,还深入探讨了均衡模型的实现及其对电池组一致性的改善,最后介绍了BMS硬件电路PCB设计的关键步骤。 适合人群:从事电池管理系统的工程师、研究人员以及对锂电池技术和仿真有兴趣的技术爱好者。 使用场景及目标:适用于希望深入了解锂电池SOC估算、BMS系统设计、仿真测试及硬件电路设计的专业人士。目标是提升对锂电池管理和仿真的理解和技能。 其他说明:文章不仅涵盖了理论知识,还包括具体的代码示例和实际应用场景,有助于读者全面掌握相关技术并应用于实践中。

    实训商业源码-小说系统-毕业设计.zip

    实训商业源码-小说系统-毕业设计.zip

    永磁同步电机转速环ADRC控制仿真实现及应用

    内容概要:本文详细介绍了永磁同步电机(PMSM)转速环采用自抗扰控制(ADRC)进行仿真的方法和技术细节。首先解释了ADRC的核心组成部分:跟踪微分器(TD)、扩张状态观测器(ESO)和非线性反馈(NLSEF),并通过MATLAB代码展示了ESO的具体实现方式。接着给出了PMSM的机械运动方程及其Python代码实现,强调了负载转矩作为主要扰动源的影响。文中对比了ADRC与传统PID控制器在面对负载突变时的表现,指出ADRC能够更快地响应并稳定系统。最后提供了ADRC参数调整的经验技巧,如TD和ESO带宽的选择以及非线性因子α的限制条件。 适用人群:对永磁同步电机控制系统感兴趣的工程技术人员、研究人员及高校相关专业学生。 使用场景及目标:适用于需要提高永磁同步电机转速环鲁棒性和动态性能的应用场合,如工业自动化设备、电动汽车驱动系统等。目标是掌握ADRC的工作原理及其在PMSM控制中的具体应用方法。 其他说明:文中提供的代码片段和参数设定建议为实际项目实施提供了宝贵的参考资料,有助于缩短开发周期并提升系统的可靠性。

    CST仿真技术解析:极化转换与非对称传输特性的建模与优化

    内容概要:本文详细介绍了利用CST Studio进行极化转换和非对称传输仿真的方法和技术要点。首先讲解了如何通过参数化建模构建用于极化转换的关键结构(如箭头型金属贴片),并强调了参数化设计的优势。接着讨论了边界条件和端口设置的具体步骤,确保仿真结果的准确性。随后提供了电场矢量图的后处理脚本,帮助直观判断极化转换的效果。最后探讨了非对称传输特性的验证方法,包括参数扫描和数据处理技巧。文中还分享了一些常见的仿真陷阱及其解决方案。 适合人群:从事微波工程、天线设计以及电磁兼容性研究的专业人士,尤其是有一定CST仿真经验的研究人员。 使用场景及目标:适用于需要深入理解和掌握CST仿真工具在极化转换和非对称传输领域的应用场合。目标是提高仿真精度,优化设计方案,缩短研发周期。 其他说明:文章不仅提供具体的技术细节,还包括实用的经验分享和避坑指南,有助于读者快速上手并解决实际问题。

    运动步数宝步步换购小程序 V4.5.1.zip

    运动步数宝步步换购小程序 V4.5.1.zip

    多类别农产品目标检测数据集.zip

    数据集介绍:多类别农产品目标检测数据集 一、基础信息 数据集名称:多类别农产品目标检测数据集 图片数量: - 训练集:2,873张图片 - 验证集:738张图片 - 测试集:357张图片 总计:3,968张标注图片 分类类别: 覆盖36种常见农产品,包括: - 水果类:苹果、香蕉、蓝莓、樱桃、葡萄、猕猴桃、桃子、梨、菠萝、西瓜等 - 蔬菜类:朝鲜蓟、芦笋、甜菜、西兰花、卷心菜、胡萝卜、黄瓜、茄子、羽衣甘蓝、洋葱、南瓜、菠菜等 - 其他作物:玉米、马铃薯、红薯、西葫芦等 标注格式: YOLO格式,包含边界框和类别编号,支持主流目标检测框架直接调用。 数据特性: 覆盖农产品生长周期不同阶段的形态,包含复杂田间背景下的目标检测场景。 二、适用场景 农业自动化分拣系统: 支持开发果蔬分拣机器人视觉模块,实现多品类农产品的自动识别与定位。 智能农业监测系统: 用于田间作物生长监测,支持产量预估、成熟度判断等农业AI应用开发。 食品加工质检应用: 可训练模型检测农产品外观缺陷,适用于食品加工流水线质量控制系统。 农业学术研究: 为精准农业、农业机器人等研究方向提供标准化检测数据集。 农业教育工具: 适用于农业院校教学实验,帮助学生学习AI在农业场景的应用实践。 三、数据集优势 类别丰富性强: 涵盖36种全球主流农产品,包含水果、蔬菜、根茎作物等多品类目标,满足复杂农业场景需求。 标注专业度高: 采用YOLO标准格式标注,所有边界框均经过人工校验,确保遮挡目标、小目标标注准确性。 数据平衡性好: 各类别样本量经均衡处理,避免长尾分布问题,适合工业级模型训练。 应用扩展性强: 除目标检测外,支持扩展至产量统计、尺寸测量等农业计算机视觉任务。 实际价值突出: 数据采集自真实农业场景,包含不同光照条件、遮挡情况的样本,可直接部署于农业智能化应用。

    课堂玩手机睡觉检测数据集VOC+YOLO格式2388张3类别.docx

    内容概要:该数据集专注于课堂上学生的行为检测,特别是针对玩手机和睡觉两种不良行为。数据集由2388张图片组成,每张图片均配有Pascal VOC格式的xml文件和YOLO格式的txt文件作为标注文件,确保了数据的多样性和灵活性。数据集中共包含三种标注类别:“normal”(正常)、“play phone”(玩手机)和“sleep”(睡觉),对应的标注框数量分别为20238、10795和3763,总计34796个框。所有图片和标注均由labelImg工具完成,采用矩形框标注法。; 适合人群:计算机视觉领域研究人员、机器学习爱好者、高校教师及学生等。; 使用场景及目标:①可用于训练和评估课堂行为识别模型,提高课堂管理效率;②适用于研究和开发基于图像的学生行为监测系统,帮助教师及时发现并纠正不良行为。; 其他说明:数据集仅提供准确且合理的标注,不对由此训练出的模型或权重文件的精度作出任何保证。

    实训商业源码-青苹果-毕业设计.zip

    实训商业源码-青苹果-毕业设计.zip

Global site tag (gtag.js) - Google Analytics