Java JNI调用c语言的dll测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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%\ include\win32目录下; jni.h在%JAVA_HOME%\ include目录下。

           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:\test下的文件如下 :

      技术分享

   8、执行 java Hello,成功!

                 

以上是关于Java JNI调用c语言的dll测试的主要内容,如果未能解决你的问题,请参考以下文章

C 语言调用 JNI_CreateJavaVM

C 语言调用 JNI_CreateJavaVM

C 语言调用 JNI_CreateJavaVM

Java跨语言调用,使用JNA访问Java外部接口

JNI调用C语言

java中怎样调用现有的dll文件