不能够加载文件或程序集,手把手教您通过Ecli

图片 1

JNI能够让大家在java代码中调用本地库的效果。

大约准备干活:

以下具体操作方法能够直接百度,答案差相当的少是不二法门可相信的。

  1. 设置JDK,配置系列景况变量
  2. 谋算好二个带CDT插件的Eclipse,笔主使用的是google的ADT Bundle,自带了CDT,对应Eclipse 3.8.0版
  3. 下载二个MinGW(免费的C/C 等语言编写翻译器套件),笔主限于公司垃圾网络,测量试验时利用mingw-offline-install-20130426 v4.6.2版,安装时仅需勾选(在线安装版下载数据量约50Mb):
  • C Compiler
  • C Compiler
  • MinGW Developer Toolkit (Indudes MSYS Basic System)

 

汤姆cat Native 那个连串能够让 汤姆cat 使用 Apache 的 apr 包来拍卖包蕴文件和网络IO操作,以晋级质量。

revit三遍开采中相遇的标题

下边记录一下JNI轻松的行使办法

布署MinGW的情形变量:

  1. 开垦境况变量(系统变量),加多 MINGW_HOME 变量,变量值是刚才MinGW的设置地点,如 D:Program FilesMinGW
  2. 安装path变量,编辑path变量增多%MINGW_HOME%bin;%MINGW_HOME%msys1.0bin;
  3. 添加 LIBRARY_PATH 变量,变量值 %MINGW_HOME%lib
  4. 添加 C_INCLUDE_PATH 变量,变量值 %JAVA_HOME%include;%JAVA_HOME%includewin32;%MINGW_HOME%include
  5. 添加 CPLUS_INCLUDE_PATH 变量,内容 %JAVA_HOME%include;%JAVA_HOME%includewin32;%MINGW_HOME%libgccmingw324.5.2includec
  6. Win7点击明确后迅即生效,若未见效请重启系统(参照他事他说加以考察安装JDK时布署操作)

第4、5步额外加多的%JAVA_HOME%include;%JAVA_HOME%includewin32;是为着让eclipse在c/c 项目中活动引进那几个目录下的种种头文件,比如 jni.h,也可在实际项指标习性中以下职分张开点名:

 图片 2

 

跟汤姆cat相关的project,除了connector外,还应该有别的三个叫汤姆cat native,汤姆cat native在现实的运作平台上,提供了一种优化技能,它本人是基于ARP(Apache Portable Runtime)能力。也便是说,我们运用了汤姆cat native手艺现在,汤姆cat在跟操作系统级其余并行方面能够做得越来越好,况兼它更像apache叁个,能够越来越好地看成一台web server。

RevitAPIUI.dll 只可以 Native Library 中执行; 脱离了Native Library,API是跑不起来的 。

  1. 创建java端接口

调用JNI全过程:

开创三个平时java工程 Test,增加贰个专程担负引进调用本地库的类 Native,代码如下:

图片 3

1 public class Native {
2     // 声明自定义本地库方法接口
3     native public static void run();
4     
5     // 自动加载本地库文件,如文件名全称为 myCLib.dll
6     static{
7         System.loadLibrary("myCLib");
8     }
9 }

图片 4

 

开辟CMD....好啊,笔主认可标题党了,整个博文仅此一处须要一句轻巧的授命! CMD导航至项目文件夹下的 src 目录,输入 javah test.Native(须求动用包名.类名的完全限定名称),生开支地点法接口头文件 test_Native.h

图片 5

 

刷新eclipse的 Package Explorer 应该会化为这样的目录状态,在那之中刚才刚才生成的 test_Native.h 文本代码如下图示(笔主抢闸创设了Test类,稍候用于调用Native类的地面方法):

图片 6

 

 

开创多少个新的 C 工程 MyC,期望编写翻译成dll的时候,选用 Shared Library 下的沙盘:

图片 7

图片 8

 

 在 MyC 工程内创造三个文件夹 src ,并将刚才 Test 项目中变化的 test_Native.h 头文件拷贝(或分开)到 MyC 工程的 src 文件夹下,Test 工程下的 test_Native.h 文本在后头的类型运维进程中校不再起其余成效,可删:

图片 9

 

*  打开 MyC 工程下的 test_Native.h ,若 #include <jni.h> 提示 Unresolved inclusion: <jni.h> 的荒唐警示(如下图所示),则表止呕前那些C项目未有一些名 jni.h 的头文件地方,参照他事他说加以考察上文 配备MinGW的条件变量 的第4、5步进行布局:

图片 10

 

 **  MyC 工程文件中接口函数代码上提示的 Syntax error 能够一时忽视,据闻是eclipse语法检测的三个bug:

 图片 11

 

 在 MyC 工程 src 文件夹中,新建三个C的兑现类 NativeC.c ,引进接口头文件 jni.htest_Native.h ,并编写接口函数 JNICALL Java_test_Native_run 的落到实处(函数接口直接从 test_Native.h 中总体拷贝过来,注意加上形参):

图片 12

1 #include <jni.h>
2 #include "test_Native.h"
3 #include <stdio.h>
4 
5 JNIEXPORT void JNICALL Java_test_Native_run
6   (JNIEnv *env, jclass clazz){
7     puts("Hello JAVA, I am C.");
8 }

图片 13

 

此时工程看起来应当是这样子的:

图片 14 

 

 

由于使用 minGW 私下认可生成的 dll 函数签字带有 @ 分隔符,将招致后边JNI调用时爆发 java.lang.UnsatisfiedLinkError: xoxoclass.xoxomethod() 错误,因而要求进行以下步骤消除多余的 @ 符号。

配置 MyC 工程: MyC 工程上右键菜单 Properties ,侧面选拔C/C Build -> Settings ,右边 Configuration 中展现的为日前正在呈现的编写翻译模板,[ Active ] 表示通过 Project->Build Project 菜单编写翻译时行使的私下认可编写翻译版本, minGW 将依附这一个模板的品质设置,编写翻译生成多套版本的 dll 或 exe ,有洁癖的同班可经过最右面包车型大巴 Manage Configurations... 开关增加和删除编写翻译模板:

图片 15

 

为了对比效果,笔主决定扩大一套新模板 ReleaseNoAt ,承袭默许的 Release 模板属性参数,并安装为Active,决不是因为洁癖或怎样奇异的原由:

图片 16  图片 17

 

OK再次回到刚才的编写翻译模板属性配置分界面,在 ReleaseNoAt 模板下,Tool Settins 页中的 MinGW C Linker -> Miscellaneous ,Linker flags 框中输入 -Wl,--kill-at,点击最下方的 Apply:

图片 18

 

点击 MinGW C Linker ,展现的参数结果应当是这么的:

图片 19

 

设若在此以前创建的C工程不是采取 Shared Library 模板,并且私下认可编写翻译出的不是 dll 文件,能够在那选取 Build Artifact 页进行改换配置,阿特ifact Type 中选取 Shared Library ,Artifact extension 中选择 dll 就能够,Output prefix 可钦赐输出 dll 文件的命名前缀:

图片 20

 

OK鲜明重临代码编辑分界面,在 MyC 工程上右键菜单,Build Configurations->Build All,生成全部模板的dll文件版本:

图片 21

 

各版本 dll 如下图所示,调节嘉义能够看见每一种 dll 生成所用的指令参数(未来显示的是 ReleaseNoAt 本子,即独一配置了去掉@符号的模板):

图片 22

 

为了验证暗许 Release 与 ReleaseNoAt 版本的分别,可用 dllexp 那个工具展开那多个dll 文件进行查看(具体方法不告知你):

Release版(上面这些 @8 就是总体劳动的罪魁祸首)

图片 23

 

ReleaseNoAt版(干净了)

图片 24

 

回到eclipse,在 Test 工程中新建文件夹 dll (命名随意),并将上边生成的 ReleaseNoAt版 libMyC.dll 拷贝到这一个dll文件夹中,重命名称叫 myCLib.dll(因为上文 Native类 中通过 System.loadLibrary("myCLib"); 加载了那么些名字的dll文件,当然你也能够修改代码变成System.loadLibrary("libMyC"); 来替代重命名),此后 MyC 工程将不再起任何效果,可删:

图片 25

 

配置 Test工程 属性,钦点工程的地头库目录,直接看图:

图片 26

 

Test工程 test包中新建 Test类 (由于时日涉及,笔主已经刚开始阶段偷偷违反规制的建筑了),在main方法中援用 Native类 的本土方法run():

1 public class Test {
2 
3     public static void main(String[] args) {
4         Native.run();
5     }
6 }

图片 27

 

末段一步,运转起来...好吧,上面已经偷跑了,最后结出如上海体育场面所示,Hello, I am Wavky.

如若咱们是Wn32/Wind64的操作系统,大家得以下载tcnative-1-ipv4.dll或tcnative-1-ipv6.dll,并把那一个文件放在%汤姆cat_HOME%/bin目录下就足以了,那样汤姆cat会有越来越好的performance。

检查程序流程:登陆,配置,运维revit。

笔者们须要选用相应的操作系统,对于windows操作系统比较便利,直接下载dll文件,然后丢到汤姆cat的bin就可以,而对于Linux,大家还亟需服从document进行布置跟编辑手艺接纳。

在运转revit以前不可能实施RevitAPI.dll和RevitAPIUI.dll的有关方法,

 1 public class JNIIterface { 2  3     // 导入最终生成的dll文件 4     static { 5         System.loadLibrary("JNIDemo"); 6     } 7  8     // 声明dll文件中实现的接口 9     public native int MyMethod();10     11     public native int add(int x, int y);12 }

试了瞬间Tomcat的起步,没有应用汤姆cat native手艺举办运转,系统运转供给3秒多。而将汤姆cat native放到bin目录之后,运营急忙,一秒种化解!神啊。

聊到底发掘非凡捕获,  MessageShow.Show(e);密闭的章程引用的RevitAPIUI中的内容。

  2. 生成接口对应的C的头文件

Tomcat在Linux上使用Native Library  http://www.linuxidc.com/Linux/2014-10/108600.htm

去除或转变方法化解难题。

    上边创制的JNIIterface类,JNIIterface .class文件的门路:JNIDemobinbaseJNIIterface .class

以下是汤姆cat的运营截图:

 

    在工程目录下的bin目录下实行命令:javah -classpath . -jni base.JNIIterface

图片 28

    然后会在JNIDemobin目录下生成base_JNIIterface.h文件

全方位系统运营只花了1003ms。运维速度拉长了2倍!

  3.利用visual studio编写接口的贯彻

图片 29

    创制C工程,具体步骤如下:

      第一步:

      图片 30

      第二步:

      图片 31

      第三部:

      图片 32

    导入必要的头文件

      将上边第二步生成的头文件,以至jdk根目录下include目录下的jni.h和

    include的win32目录下的jni_md.h文件拷贝到工程目录下(在成立的工程方面右键,然后点击尾数第二项就足以展开)

图片 33

    创制功用完成公文

      在工程目录下源文件上右键,然后点击-》,创造三个cpp文件

    并编制如下代码:

 1 #include "base_JNIIterface.h" 2 #include "jni.h" 3 #include <stdio.h> 4  5 JNIEXPORT jint JNICALL Java_base_JNIIterface_MyMethod 6   (JNIEnv *, jobject){ 7       printf("成功实现JNI测试DEMO"); 8       return 0; 9 }10 11 JNIEXPORT jint JNICALL Java_base_JNIIterface_add12   (JNIEnv *, jobject, jint a, jint b){13       return a   b;14 }

  4.生成dll文件

    在工程目录中的「施工方案」上右键,选取属性,然后如下图所示构成类别

      图片 34

    然后编写翻译工程后,会在工程目录下的Release目录下成成dll文件

      图片 35

  5. 将dll文件配置到java工程

      首先向dll文件放在java工程根目录下的lib目录下

      然后依照如下步骤将dll文件作为Native Library增加进工程

        图片 36

    编辑上海体育场所所示的Native Library Location,然后在弹出的分界面选拔Native Library所在的文本夹:

        图片 37

    6.编纂测验类,检证JNI是或不是中标选用

 1 public class HelloJNI { 2  3     public static void main(String[] args) { 4         JNIIterface hw = new JNIIterface(); 5         int t = hw.add(3, 7); 6         int s = hw.MyMethod(); 7         System.out.println; 8         System.out.println; 9     }10 }

    运转后的测量试验结果如下:

100成功??JNI??DEMO

地点就是记录了选拔JNI的最大旨步骤。

对此怎么样使用已经写好的第三方dll文件的法力,譬喻系统的dll文件,还必要举办浓厚索求。

参照小说:

本文由星彩网app下载发布于星彩网app下载,转载请注明出处:不能够加载文件或程序集,手把手教您通过Ecli

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。