zoukankan      html  css  js  c++  java
  • Java JNI调用c语言的dll测试

           最近复习C语言和java语言(10年没用了,温习一下),用JNI调用C语言的dll测试,以前没做过,在网上找了很多,总结如下:

          环境:windows 10(64位) + JDK(32位,版本1.7.0_79) + MinGW(32位),注意JDK和MinGW要么都是32位,要么都是64位,不能一个是32位另一个是64位。

          java和MinGW的环境配置在网上查找。

    一、【不用eclipse,用记事本手工编辑 .java和 .c 程序】

             1、hello.java代码如下:            

          

             2、编译Hello.java程序命令:javac Hello.java   --生成Hello.class文件。

             3、生成Hello.h文件命令:javah Hello    --生成Hello.h头文件,该头文件在C语言编码中要用到,所以将Hello.h存放到后缀为 .c 文件代码相同的目录。

                   

             4、arr.c文件内容如下:

                  

              5、C编译环境准备:需要将JDK对应的 jni_md.h 和 jni.h 两个文件拷贝到MinGW的安装目录的include目录下。      

                    jni_md.h在 %JAVA_HOME% includewin32目录下; jni.h在%JAVA_HOME% include目录下。

                    如果不想拷贝,则在下面的6步命令末尾需要添加如下内容:

                      -I"C:Program Files (x86)Javajdk1.7.0_79include" -I"C:Program Files (x86)Javajdk1.7.0_79includewin32"

                       其中,JAVA_HOME=C:Program Files (x86)Javajdk1.7.0_79. 根据自己的JAVA_HOME路径修改。

                       添加双引号是因为gcc命令行解释不了”Program Files (x86)“中的空格字符。

               6、编译生成 hello.dll 动态库文件命令:

                       gcc arr.c -shared -o hello.dll -Wl,--kill-at

                    命令解释:

                                 -shared  -o hello.dll      /* 指定编译生成的目标文件 hello.dll是动态库文件 */

                                 -Wl     /* 告诉编译器将后面的参数传递给链接器 */

                                 -Wl,--kill-at  /*告诉链接器去掉函数名称后缀的@符号 --该问题涉及比较深入的东西,暂时不管,只管按命令执行,生成 .dll 文件,实现测试目的。*/

        7、检查测试目录 E: est下的文件如下 :

          

       8、执行 java Hello,成功!


     二、【使用Eclipse编辑】

              使用 eclipse 编辑的区别主要在 JAVA 源程序常常装在 package 中,所以需要特别处理一下:

       1、编辑完成 .java 代码后,就用eclipse 编译成.class文件。

             2、使用javah -o E: estcom_test_HelloWorld.h  -classpath  $ProjectPathuildclasses  com.test.HelloWorld 

                  $ProjectPath :该路径指eclipse中生成HelloWorld.java项目的路径。

         注意:com.test.HelloWorld这个名称一定要按自己的 package 顺序写完。

             3、使用命令行生成JNI格式的C语言头文件.h文件:

                   gcc arr.c -shared -o 希望存放的路径hello.dll -Wl,--kill-at -I"JDK安装路径include" -I"JDK安装路径includewin32"

                   希望存放的路径:指生成的hello.dll文件存放路径。

                    JDK安装路径: 指自己的JAVA_HOME目录路径。

             4、在 eclipse的项目配置中(右键项目名称->Build Path -> Configure Build Path,然后选择 Java Build Path ,在右边的Source 页展开当前项目;

                  然后,选中Native Library Location,点击“Edit” ,再选择“Workspace”,将第3步生成的 .dll  文件目录添加到项目中。

            5、运行HelloWorld,成功!

    三、JNI测试常见错误 java.lang.UnsatisfiedLinkError:

              参考:http://blog.csdn.net/binyao02123202/article/details/18075747

                      http://blog.csdn.net/niuxinlong/article/details/4176612

       

  • 相关阅读:
    matlab中绘制折线图、绘制条形图(柱形图)的简单方法
    2.序列类型方法
    年度KPI绩效面谈记录
    软件开发工作杂谈——更杂版
    软件研发工作杂谈
    FFI Navigtor在Windows环境下的"No Such File or Directory"Bug解决过程
    Linux环境部署帆软报表(FineReport)说明
    IIS负载均衡Application Request Route 安装配置说明(ARR)
    python使用了resetKeyboard输入法打不开怎么办
    python 执行时报错AttributeError: 'dict' object has no attribute 'has_key'
  • 原文地址:https://www.cnblogs.com/luoyx/p/5222423.html
Copyright © 2011-2022 走看看